成员模板变量专门化
member template variable specializing
类可以包含一个成员模板变量,该变量必须是静态的:
class B
{
public:
template <typename X>
static X var;
B() { std::cout << "Create B " << __PRETTY_FUNCTION__ << std::endl; }
template <typename T>
void Print() { std::cout << "Value is " << var<T> << std::endl; }
};
必须像所有静态成员一样在类作用域之外声明:
下面的代码按预期编译并工作:
template<typename T> T B::var=9; // makes only sense for int,float,double...
但是如何专门化这样的变量,如以下非工作代码(gcc 6.1的错误消息):
template <> double B::var<double>=1.123;
失败:
main.cpp:49:23: error: parse error in template argument list
template <> double B::var<double>= 1.123;
^~~~~~~~~~~~~~~~~~
main.cpp:49:23: error: template argument 1 is invalid
main.cpp:49:23: error: template-id 'var<<expression error> >' for 'B::var' does not match any template declaration
main.cpp:38:22: note: candidate is: template<class X> T B::var<T>
static X var;
template <> double B::var=1.123;
与 失败
template <> double B::var=1.123;
^~~
main.cpp:38:22: note: does not match member template declaration here
static X var;
这里的正确语法是什么?
我想你应该加一个空格
template <> double B::var<double> = 1.123;
^ here
否则(如果我没有错的话)>=1.123
与"等于或大于1.123"混淆
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- SFINAE的变分变量模板专门化
- 为什么我必须专门化递归模板变量
- 在GCC中专门化静态类变量时出错:枚举示例
- 专门化时对静态成员变量的未定义引用
- 成员模板变量专门化
- 存储在变量模板专门化中的Spirit-X3解析器在Clang上不起作用
- 可变变量模板类的部分专门化是否有利于非可变变量专门化
- 头文件中模板专门化的静态变量初始化