[英]Passing string as template parameter in C++
我正在嘗試將字符串作為C ++模板參數傳遞,但似乎無法使其正常工作。 作為記錄,我正在使用SystemC庫(因此,所有sc_xxx東西)。 根據此答案 ,我在做什么應該可以,但是我看不到自己在做什么。 編譯器告訴我“ filePath
不能以常量形式出現”。任何幫助將不勝感激。
main.cpp
int sc_main(int argc, char* argv[])
{
const char filePath[] = "test.txt";
Interconnect<sc_uint<32>, filePath, 10> myInterconnect;
return 0;
}
互連
template<class T, const char filePath[], unsigned nPortPairs = 10>
SC_MODULE(Interconnect)
{
public:
...
};
您的filePath
是本地自動變量,因此它的地址是運行時功能。 模板需要一個在編譯時已知的地址。 在C ++ 03中,還有一個關於鏈接的問題。 我不確定,但我認為鏈接問題已在C ++ 11中修復。
一個簡單的解決方法是讓文件路徑成為普通的構造函數參數。
我看到您在做什么與您提供的鏈接答案之間有兩個區別。
我的猜測是,您只需要消除這些差異即可。
我發現了另一個資源 ,似乎可以證實我的猜測。
如果您擁有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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.