簡體   English   中英

在C ++中將字符串作為模板參數傳遞

[英]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中修復。

一個簡單的解決方法是讓文件路徑成為普通的構造函數參數。

我看到您在做什么與您提供的鏈接答案之間有兩個區別。

  1. 您的字符串常量是一個局部變量。 在另一個答案中,它是一個全局變量。
  2. 您的模板參數是const char數組。 在另一個答案中,它是一個const char *。

我的猜測是,您只需要消除這些差異即可。

我發現了另一個資源 ,似乎可以證實我的猜測。

如果您擁有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM