在不指定模板参数的情况下引用非依赖名称

L. *_*uce 2 c++ templates dependent-name

考虑以下:

template<typename T> struct Foo {
     typedef void                  NonDependent;
     typedef typename T::Something Dependent;
}
Run Code Online (Sandbox Code Playgroud)

我想引用NonDependent而不指定任何模板参数,如Foo::NonDependent.

我知道我总是可以使用虚拟参数:

Foo<WhateverSuits>::NonDependent bla;
Run Code Online (Sandbox Code Playgroud)

但这很难看,而且由于它NonDependent是不变的T,我想在不依赖假人的情况下参考它.可能吗?

谢谢

use*_*670 5

如果NonDependent不指定模板参数,则无法引用,因为根据模板参数,它可能会有所不同或完全不存在.例如:

template<> struct Foo<int>
{
   typedef float NonDependent;
};
template<> struct Foo<std::string>
{
   typedef typename std::string::value_type Dependent;
};
Run Code Online (Sandbox Code Playgroud)

您可能需要将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;
Run Code Online (Sandbox Code Playgroud)