gpt4 book ai didi

c++ - 如何在 C++ 中调用可变参数模板构造函数?

转载 作者:行者123 更新时间:2023-11-30 03:34:50 25 4
gpt4 key购买 nike

我正在学习 C++ 模板技术。

我制作了一个带有可变参数模板扩充的构造函数,如下所示。

类被简化了很多,所以没有意义。但是我无法调用该函数。编译器告诉我它不能直接调用构造函数。

如何调用?

#include <utility>

class TemplateVariadicAugments {
public:

template <typename FutureInnterTemplateClass, typename... Args>
TemplateVariadicAugments(Args&&... args) : value_(std::forward<Args>(args)...) {}

virtual ~TemplateVariadicAugments() = default;

int value_;
};

void test_variadic_template_augments(void) {

TemplateVariadicAugments a = TemplateVariadicAugments::template TemplateVariadicAugments<int, int>(1);

}

最佳答案

在你写的表单中,没有办法调用构造函数。首先,在 C++ 中,即使在微不足道的情况下,也不能通过名称调用构造函数:

class A
{
public:
A() {}
};

void foo()
{
A::A(); // Illegal.
}

然后,由于不能直接调用构造函数,也不能显式实例化模板,因此必须推导所有模板参数。但在您的情况下,无法推导出 FutureInnterTemplateClass,因为它未在构造函数中的任何地方使用。

解决方案是从构造函数中删除冗余参数:

template <typename... Args>
TemplateVariadicAugments(Args&&... args) : value_(std::forward<Args>(args)...) {}

现在一个对象可以构造如下:

TemplateVariadicAugments obj(1);

Args 在这种情况下将被正确推导为 int

但在这种情况下,不清楚你想用可变参数模板参数说什么,就像你构造一个这样的对象一样:

TemplateVariadicAugments obj(1, 2);

您的 value_ 成员初始化将等效于此代码:

int value_(1, 2);

这显然是错误的。

关于c++ - 如何在 C++ 中调用可变参数模板构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733425/

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