在C ++中将字符串作为模板参数传递

时间:2014-10-02 02:43:26

标签: c++ string templates systemc

我正在尝试将字符串作为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:
 ...
};

3 个答案:

答案 0 :(得分:2)

您的filePath是本地自动变量,因此其地址是运行时功能。模板需要在编译时已知的地址。在C ++ 03中,还存在关于链接的问题;我不完全确定,但我认为在C ++ 11中修复了链接问题。

一个简单的解决方法是让文件路径成为普通的构造函数参数。

答案 1 :(得分:0)

我发现你在做什么和你提供链接的答案有两个不同。

  1. 您的字符串常量是一个局部变量。在另一个答案中,它是一个全局变量。
  2. 您的模板参数是一个const char数组。另一个答案是const char *。
  3. 我的猜测是你只需要消除这些差异。

    我发现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;