簡體   English   中英

在C ++中初始化取決於模板參數類型的變量

[英]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.

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