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