gpt4 book ai didi

c++ - 具有继承性的可变参数模板和默认值

转载 作者:行者123 更新时间:2023-11-28 01:30:14 29 4
gpt4 key购买 nike

#include <iostream>

struct A {
int a;
std::string b;
A(int a_, std::string b_) : a(a_), b(b_) { std::cout << a << b << std::endl; }
};

struct B : public A {
static const int VERSION=2;
float c;

template<typename ... ARGS>
B(float c_, int v=VERSION, ARGS&&... args) : A(v, std::forward<ARGS>(args)...), c(c_) { std::cout << c << std::endl; }
};

int main() {
B(3.14, "abc");
}

大家好,编译器给我模板参数推导/替换失败错误。如何使用可变参数模板的默认值?

variadic.cpp: In function ‘int main()’:
variadic.cpp:18:15: error: no matching function for call to ‘B::B(double, const char [4])’
B(3.14, "abc");
^
variadic.cpp:14:2: note: candidate: template<class ... ARGS> B::B(float, int, ARGS&& ...)
B(float c_, int v=VERSION, ARGS&&... args) : A(v, std::forward<ARGS>(args)...), c(c_) { std::cout << c << std::endl; }
^
variadic.cpp:14:2: note: template argument deduction/substitution failed:
variadic.cpp:18:15: note: cannot convert ‘"abc"’ (type ‘const char [4]’) to type ‘int’
B(3.14, "abc");
^
variadic.cpp:9:8: note: candidate: B::B(const B&)
struct B : public A {
^
variadic.cpp:9:8: note: candidate expects 1 argument, 2 provided
variadic.cpp:9:8: note: candidate: B::B(B&&)
variadic.cpp:9:8: note: candidate expects 1 argument, 2 provided

最佳答案

这里的问题是您的构造函数可以用一个、两个或更多参数调用。

如果你用一个参数调用它,第二个参数是默认的。

如果您提供两个或更多参数,则不会使用提供的默认参数。使用了您的第二个参数,它必须与第二个参数的类型匹配。

请注意,通常情况下,您可以通过重载函数而不是提供默认参数来获得类似的结果。在这种情况下,我怀疑这会给你你想要的结果,但那是我在猜测你的意图。

关于c++ - 具有继承性的可变参数模板和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51858941/

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