考虑以下:

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;

10-04 23:11