C++ 变量模板仅适用于C++;14

C++ 变量模板仅适用于C++;14,c++,c++11,c++14,C++,C++11,C++14,我声明了一个结构,它是: template <typename T> struct key{ T value; uint64_t less; uint64_t equal; uint64_t greater; }; 模板 结构键{ T值; uint64_t以下; uint64_t相等; uint64_t更大; }; 我使用无序的_映射来存储键类型对象的地址及其相应的值。无序_图的语法和声明如下: template<typename T>

我声明了一个结构,它是:

template <typename T>
struct key{

T value;            
uint64_t less;  
uint64_t equal; 
uint64_t greater;

};
模板
结构键{
T值;
uint64_t以下;
uint64_t相等;
uint64_t更大;
};
我使用无序的_映射来存储键类型对象的地址及其相应的值。无序_图的语法和声明如下:

template<typename T>
std::unordered_map<key<T> *,int32_t> htable;
模板
std::无序映射表;
当我编译我的程序时,g++抛出一个警告:变量模板只能与-std=c++14或-std=gnu++14一起使用
我的问题是,我的程序是否与C++11兼容,还是必须指定-std=C++14标志?上述用法不常见吗?如何使其与C++11兼容?我需要散列key对象的地址并存储与之相关的信息,但是key是一种泛型类型,我不知道实现它的其他方法。

正如编译器所说,在C++14之前,变量模板是不可用的。我认为这是被接受添加该特性的论文(可能是更高版本;我还没有验证哪篇论文真正被选入标准)

如果您需要类似于变量模板的功能,尽管它有不同的语法,您可以使用带有
静态
局部变量的函数模板,并返回对该变量的引用,例如:

template <typename T>
std::unordered_map<key<T>*, int32_t>& htable() {
    static std::unordered_map<key<T>*, int32_t rc;
    return rc;
}
模板
std::无序映射&htable(){

静态std::unordered_map正如编译器所说,在C++14之前,变量模板是不可用的。我认为是被接受添加该特性的论文(可能是更高版本;我还没有验证哪篇论文真正被选入了标准)

如果您需要类似于变量模板的功能,尽管它有不同的语法,您可以使用带有
静态
局部变量的函数模板,并返回对该变量的引用,例如:

template <typename T>
std::unordered_map<key<T>*, int32_t>& htable() {
    static std::unordered_map<key<T>*, int32_t rc;
    return rc;
}
模板
std::无序映射&htable(){

静态std::无序映射如果编译器告诉您使用
--std=c++14
,那么需要
--std=c++14
是有意义的。这不是一个技巧性的问题。您实际上是在尝试创建一个变量模板吗?您知道这是什么吗?还是您只是在尝试创建一个
无序映射
对象?我正在尝试创建一个变量模板sh结构“key”的地址通过使用堆中的内存并存储相应的值来获得。我不知道变量模板是什么。请检查此处:如果编译器告诉您使用
--std=c++14
,则需要
--std=c++14
是有意义的。这不是一个技巧性问题。您实际上是在尝试创建变量模板吗?您知道吗这是什么?或者你只是想创建一个
无序的\u map
对象?我试图散列通过使用堆中的内存并存储相应的值而获得的结构“key”的地址。我不知道变量模板是什么。请检查此处: