作为非类型模板参数的常量字符串引用
const string reference as non-type template argument
我正在尝试将 const 字符串引用作为非类型模板参数,我无法克服此编译错误。
test.h :
#include <string.h>
#include <iostream>
template<const std::string& V> class TestTmplt
{
};
const std::string& TEST_REF = "TESTREF" ;
typedef TestTmplt<TEST_REF> TestRefData ;
test.cpp :
#include <test.h>
template class TestTmplt<TEST_REF> ;
编译错误:
./test.h:10:34: error: could not convert template argument âTEST_REFâ to âconst string& {aka const std::basic_string<char>&}â
./test.h:10:49: error: invalid type in declaration before â;â token
我正在 centos linux 上编译,使用以下 gcc 命令
g++ -c -MMD -MF test.u -g -D_LINUX -std=c++03 -pthread -Wall -DVALGRIND -Wno-missing-field-initializers -z muldefs -I. -o test.o test.cpp
问题是 TEST_REF
不是 std::string
类型,而是 const std::string &
类型,也就是说,它不是 std::string
类型的对象,因此不能使用作为模板参数。稍微改变一下,就可以了:
#include <string>
template<const std::string& V> class TestTmplt
{
};
std::string TEST_REF = "TESTREF";
template class TestTmplt<TEST_REF>;
我正在尝试将 const 字符串引用作为非类型模板参数,我无法克服此编译错误。
test.h :
#include <string.h>
#include <iostream>
template<const std::string& V> class TestTmplt
{
};
const std::string& TEST_REF = "TESTREF" ;
typedef TestTmplt<TEST_REF> TestRefData ;
test.cpp :
#include <test.h>
template class TestTmplt<TEST_REF> ;
编译错误:
./test.h:10:34: error: could not convert template argument âTEST_REFâ to âconst string& {aka const std::basic_string<char>&}â
./test.h:10:49: error: invalid type in declaration before â;â token
我正在 centos linux 上编译,使用以下 gcc 命令
g++ -c -MMD -MF test.u -g -D_LINUX -std=c++03 -pthread -Wall -DVALGRIND -Wno-missing-field-initializers -z muldefs -I. -o test.o test.cpp
问题是 TEST_REF
不是 std::string
类型,而是 const std::string &
类型,也就是说,它不是 std::string
类型的对象,因此不能使用作为模板参数。稍微改变一下,就可以了:
#include <string>
template<const std::string& V> class TestTmplt
{
};
std::string TEST_REF = "TESTREF";
template class TestTmplt<TEST_REF>;