[英]Initializing a variable dependent on type in template parameter in C++
我有一個帶有靜態const變量的類,需要根據template參數中的變量類型進行不同的初始化。 有沒有專門的方法可以做到這一點?
在我的頭文件中,我有:
template<class Item>
class CircularQueue {
public:
static const Item EMPTY_QUEUE;
...
嘗試在.cpp文件中初始化它:
template<typename Item> const Item CircularQueue<Item>::EMPTY_QUEUE = Item("-999");
我想將其初始化為-999,無論它是int,double還是string。 但是,在上面的代碼中,我收到“從'const char'轉換為'int'會丟失精度[-fpermissive]”的錯誤。
提供一個使用單獨的可以專門化的幫助程序類的示例,而不必專門化整個模板類,因為您提到過,您希望看到這種方法的示例。
只需聲明一個單獨的模板類即可設置默認值,並將其專用於std::string
。
template<class Item> class defaultItem {
public:
static constexpr Item default_value() { return -999; }
};
template<> class defaultItem<std::string> {
public:
static constexpr const char *default_value() { return "-999"; }
};
如果您的C ++編譯器不是最新版本,則不必使用constexpr
關鍵字。 如果需要,還可以為const char *
定義相同的專業化const char *
,而不是std::string
。
然后,您的主類只需將EMPTY_QUEUE
定義為:
template<typename Item>
const Item CircularQueue<Item>::EMPTY_QUEUE =
defaultItem<Item>::default_value();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.