簡體   English   中英

單獨實施部分專業化的模板

[英]Separate implementation of a partially specialized template

我正在為應該將函數簽名作為模板參數(實際上是該簽名的工廠類)的類創建模板。

為此,我使用了在這些SO問題中也提到的技術:類函數簽名的表達式作為C ++模板參數,函數簽名作為模板參數

只要我在專門化定義內包含聲明,這就可以很好地工作:

template<typename Signature>
class Factory;

template<typename Ret, typename... Args>
class Factory<Ret(Args...)>
{
public:
Factory(){}
};

現在,我想在定義后分隔聲明,以使標題對於用戶更易讀,但我無法為此找到正確的簽名。

我嘗試了以下簽名

template<typename Ret, typename... Args>
Factory<Ret, Args...>::Factory(){}

template<typename Ret, typename... Args>
Factory<Ret(Args...)>::Factory(){}

但是在兩種情況下,編譯器都試圖為通用模板而不是專門化定義該函數,這顯然會失敗。

您是否知道如何定義這種類型的部分專用類模板的功能?

第二個簽名是正確的。

這樣可以很好地工作,並用gcc產生預期的結果。

#include <iostream>

template<typename Signature>
class Factory;

template<typename Ret, typename... Args>
class Factory<Ret(Args...)>
{
public:
    Factory();
};


template<typename Ret, typename... Args>
Factory<Ret(Args...)>::Factory()
{
    std::cout << "Hello world" << std::endl;
}

int main()
{
    Factory< int(char, float) > foo;
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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