gpt4 book ai didi

c++ - 部分专用模板的单独实现

转载 作者:行者123 更新时间:2023-11-28 04:11:42 24 4
gpt4 key购买 nike

我正在为一个类创建模板,该类应该将函数签名作为模板参数(实际上是该签名的工厂类)。

为此,我使用了这些 SO 问题中也提到的技术: Function signature-like expressions as C++ template argumentsFunction signature as template parameter .

只要我在特化定义中有声明,这就可以很好地工作:

template<typename Signature>
class Factory;

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

现在我想在定义之后分隔声明以使 header 对用户而言更具可读性,但我无法为此找到正确的签名。

我尝试了以下签名

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;
}

关于c++ - 部分专用模板的单独实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57647532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com