考虑以下:
template<typename T> struct Foo {
typedef void NonDependent;
typedef typename T::Something Dependent;
}
我想在不指定任何模板参数的情况下引用
NonDependent
,就像Foo::NonDependent
一样。我知道我总是可以使用哑参数:
Foo<WhateverSuits>::NonDependent bla;
但这很丑陋,并且由于
NonDependent
相对于T
是不变的,因此我想引用它而不依赖于虚拟对象。可能吗?谢谢
最佳答案
如果不指定模板参数,则不能引用NonDependent
,因为它可能会有所不同,或者完全取决于模板参数。例如:
template<> struct Foo<int>
{
typedef float NonDependent;
};
template<> struct Foo<std::string>
{
typedef typename std::string::value_type Dependent;
};
您可能需要将
NonDependent
声明移到基本(非模板)结构中,并引用它:struct FooBase{ typedef void NonDependent; };
template<typename T> struct Foo: public FooBase
{
typedef typename T::Something Dependent;
};
template<> struct Foo<int>: public FooBase
{
typedef float NonDependent;
};
FooBase::NonDependent bla;