gpt4 book ai didi

c++ - 如何将可变参数从一个模板传递到另一个

转载 作者:行者123 更新时间:2023-12-01 14:43:12 25 4
gpt4 key购买 nike

我有以下代码:

#include <tuple>
#include <memory>

template <typename ...Args>
class Button
{
Button(const std::string& name, Args&& ...args) {
std::tuple<Args...> tuple_ = std::tuple<Args...>(args...);
}
};

template<typename T1, typename ...Args>
void addObject(const std::string& name, Args&& ...args) {
std::unique_ptr<T1> obj(new T1(name, std::forward<Args>(args)...));
//...rest of the code...
}

int main() {
//if we comment the next line it compiles well
addObject<Button>("BtnName", 0, 1, 2);
return 0;
}

但是,它不会编译出类似“错误LNK2019:无法解析的外部符号...”或“没有匹配函数来调用'addObject class Button>(const char [8],int,int,int)''”之类的错误。如果我们注释“addObject”函数,则可以很好地编译。

如何以正确的方式将args传递到另一个模板?

最佳答案

Button是一个类模板;在addObject<Button>("BtnName", 0, 1, 2);中使用它时,必须为其指定模板参数,例如Button<...some arguments...>

除了上述解决方案外,也许您想将模板参数Args从类移动到Button的构造函数中,然后可以从函数参数(即std::forward<Args>(args)...)中推导出来。

class Button
{
public:
template <typename ...Args>
Button(const std::string& name, Args&& ...args) {
std::tuple<Args...> tuple_ = std::tuple<Args...>(std::forward<Args>(args)...);
}
};

LIVE

其他问题:
  • Button的构造函数是private
  • 没有#include <string>
  • 关于c++ - 如何将可变参数从一个模板传递到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60969842/

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