【发布时间】:2021-09-02 03:41:26
【问题描述】:
我有一个带有可变模板参数的类:
template<typename... Args>
class something {
public:
something(Args&&... args); // omitted for brevity
}
我有一个接受参数列表并返回此类对象的函数:
template<typename... Args>
auto make_something(Args&&... args) {
return something<Args...>(std::forward<Args>(args)...);
}
如果我这样称呼它:
something<int, std::string> s = make_something<int, std::string>(1, "");
它可以编译并且工作正常。
但是如果我尝试传递一个 const 参数,我会得到编译错误:
const std::string t = "";
something<int, std::string> s1 = make_something(1, t); // no viable conversion from something<... const basic_string<char>> to something<... std::string>
如何成功传递 const,然后 idk 将结果转换为请求的类型,由非 const 类型参数化?
我怀疑这与我返回的对象的类型有关,但我实际上不知道在这种情况下用什么替换 auto。
【问题讨论】:
-
请注意,您的构造函数
something(Args&&...);不使用转发引用,因为类型是由类固定的。 -
@Jarod42 我不确定我是否完全理解你的意思。您是否建议我从带有模板参数 A1 和 Args1 的参数中对构造函数进行参数化...?或者你的意思是我没有调用
std::forward来传递参数——因为我是,只是我省略了成员初始化列表。
标签: c++ templates variadic-templates