基底クラスA_Base
が親クラスによって型が定義されているデータメンバーをインスタンス化する必要があるVisual Studio 2008 C++アプリケーションがあります。たとえば:親クラスで定義された型を使用している基底クラス
template< typename T >
class A_Base
{
public:
typedef typename T::Foo Bar; // line 10
private:
Bar bar_;
};
class A : public A_Base<A>
{
public:
typedef int Foo;
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
return 0;
}
残念ながら、コンパイラは手遅れになるまでT::Foo
が何であるかを知っていません表示され、私はこのようなエラーが出る:
1>MyApp.cpp(10) : error C2039: 'Foo' : is not a member of 'A'
1> MyApp.cpp(13) : see declaration of 'A'
1> MyApp.cpp(14) : see reference to class template instantiation 'A_Base<T>' being compiled
1> with
1> [
1> T=A
1> ]
1>MyApp.cpp(10) : error C2146: syntax error : missing ';' before identifier 'Bar'
1>MyApp.cpp(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>MyApp.cpp(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
は、このタイプのを達成するための方法はあります機能性?
おかげで、 PaulH