暗黙的な型変換が 機能する場所と機能しない場所の次の例を考えてみましょう。
#include <iostream>
#include <vector>
struct Thingy
{
void write()
{
std::cout << "x" << std::endl;
}
};
struct Node
{
Thingy a;
int data;
operator Thingy&(){return a;}
};
void f(Thingy thingy)
{
thingy.write();
}
template <typename TIterator>
void f (TIterator begin, TIterator end)
{
for (TIterator it = begin; it != end; ++it)
it->write();
}
int main()
{
std::vector<Node> vector(10);
f(vector.begin(), vector.end()); // Doesn't compile
f(vector[3]); // compiles
vector[3].write(); // Doesn't compile
return 0;
}
これはなぜですか?の
void Node::write();
以下と基本的に異なるものであってはなりません。
void write(Node* this);
サンプル コードをコンパイルして実行する方法はありますか?
編集:
うまくいかないメカニズムを理解し、哲学を理解したい。なぜC++標準委員会はそれが悪い考えだと思ったのですか?