引用非依赖名称而不指定模板参数
refer to a non-dependent name without specifying template parameter
考虑以下内容:
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;
如前所述,这是不可能做到的。主要是因为Foo不是一个在运行时可用的类型,而是一个在编译时可用的模板,所以像Foo::NonDependent
这样的东西是无效的。
为了在运行时获得可用的东西,您必须实例化模板,提供最少数量的参数,以便生成一个类,在运行时可以引用其中的子类型。
相关文章:
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 类成员函数参数列表是否可以依赖于模板参数?
- 如何定义依赖于参数包转换的函数的返回类型
- 引用非依赖名称而不指定模板参数
- C++ 使函数调用依赖于模板参数
- 如何初始化依赖于先前条目的可变参数模板?
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- 依赖的非类型参数包:标准怎么说?
- 运算符<<依赖于参数的查找不在全局命名空间中查找
- 依赖于其他模板参数的模板参数
- 使用不依赖于方法模板参数的enable_if
- 如何定义具有依赖于符号调试的参数的函数
- 如何让成员函数实现依赖于类的模板参数?
- 编译器是否也将所有参数依赖类型实例化,即使超载函数的参数计数不匹配
- 我在一个简单的参数依赖查找/模板类型推断问题方面遇到问题
- c++使用声明和参数依赖查找
- c++ Koenig(参数依赖)查找:如果不同名称空间中的两个名称空间函数具有相同的参数类型该怎么办?
- 来自iso c++ n3290的一点:参数依赖的名称查找:
- 顶级命名空间中类的参数依赖查找
- 模板和参数依赖查找