我正在尝试将字符串作为C ++模板参数传递,但我似乎无法使其工作。为了记录,我正在使用SystemC库(因此所有sc_xxx的东西)。根据{{3}},我正在做的事情应该有效,但我看不出我做错了什么。编译器告诉我“filePath
不能出现在常量”表达式中。“任何帮助都将受到赞赏。
的main.cpp
int sc_main(int argc, char* argv[])
{
const char filePath[] = "test.txt";
Interconnect<sc_uint<32>, filePath, 10> myInterconnect;
return 0;
}
interconnect.h
template<class T, const char filePath[], unsigned nPortPairs = 10>
SC_MODULE(Interconnect)
{
public:
...
};
答案 0 :(得分:2)
您的filePath
是本地自动变量,因此其地址是运行时功能。模板需要在编译时已知的地址。在C ++ 03中,还存在关于链接的问题;我不完全确定,但我认为在C ++ 11中修复了链接问题。
一个简单的解决方法是让文件路径成为普通的构造函数参数。
答案 1 :(得分:0)
我发现你在做什么和你提供链接的答案有两个不同。
我的猜测是你只需要消除这些差异。
我发现another resource似乎证实了我的猜测。
答案 2 :(得分:0)
如果您有boost
,可以使用以下宏将其简化:
#define C_STR(str_) boost::mpl::c_str< BOOST_METAPARSE_STRING(str_) >::value
然后使用如下:
template<const char* str>
struct testit{
};
testit<C_STR("hello")> ti;