ページ 11

【C++】制御文の自作は可能でしょうか

Posted: 2010年3月11日(木) 20:01
by array
C/C++で自作の制御文を作る事は可能でしょうか

制御文とは、if文やwhile文、for文などを指します。

C++の仕様的に不可能であれば、不可能という事実を知りたいです。
可能であれば、キーワード程度で良いので簡単にご教授お願い致します。


※こういったループ処理を
int main() {
int dt[10];

for (int i = 0; i < 10; i++) {
dt = i;
}
}

※自作の制御文で動作させたい【理想の形】
int main() {
int dt[10];

foreach (dt as key => value) {
value = key;
}
// key に配列の添字(数字)、valueにdt参照ポインタ
}


不足して分からない部分があれば補足しますので、よろしくお願いします。

Re:【C++】制御文の自作は可能でしょうか

Posted: 2010年3月11日(木) 21:08
by たかぎ
不可能です。
ただし、マクロを使えば近いことができる場合もあります。
Boost C++ LibrariesのForeachを調べてみてください。

Re:【C++】制御文の自作は可能でしょうか

Posted: 2010年3月11日(木) 21:29
by array
毎回ご回答ありがとうございます。

> マクロを使えば近いことができる場合もあります。
確かに、マクロが一番近い事ができそうですね。
foreach を for文に置き換えるようなマクロも書こうと思ったのですが、「,」が入ると
理想のイメージと異なるので断念してました。

今回の質問はどちらかというと、制御文の自作は不可能だという事を
確認しておきたかったので、たかぎさんからの回答を頂けて安心しました。

勉強になりました。ありがとうございます^^ 画像

Re:【C++】制御文の自作は可能でしょうか

Posted: 2010年3月11日(木) 23:17
by たかぎ
C++の場合、制御文を自作するのではなく、アルゴリズム関数とファンクタを組み合わせるのが一般的なスタイルです。
標準ライブラリでは添字を操作できるものがないので、例えば次のようなものを自作することになるかと思います。

template <class ForwardIterator, class BinaryOp>
void for_each_with_subscript(ForwardIterator first, ForwardIterator last, BinaryOp op)
{
for (typename std::iterator_traits<ForardIterator>::difference_type i = 0; first != lasy; ++i)
op(*iter, i);
}

Re:【C++】制御文の自作は可能でしょうか

Posted: 2010年3月12日(金) 07:39
by array
なるほど、C++の標準ライブラリを勉強しなおした方が今後の為になりそうですね。