C++ 如何构造一个std::variant类型的对象,该对象本身被模板化,构造函数转发参数
我已将C++ 如何构造一个std::variant类型的对象,该对象本身被模板化,构造函数转发参数,c++,C++,我已将var\u t定义为std::variant类型。模板类Fum应将其构造函数参数转发给Bazz和Ack,以便创建它们。但是,我得到以下错误: [g++默认值#1]错误:功能样式转换没有匹配的转换 Bazz和Ack定义: 我认为模板化的C'Tor造成了歧义。因此,var_t不知道它是否应该构造Fum或Fum。但我不确定。那么我该如何解决这个问题呢?有一个适当的过载来进行安放施工 特别是: template< class T, class... Args > constexpr e
var\u t
定义为std::variant
类型。模板类Fum应将其构造函数参数转发给Bazz和Ack,以便创建它们。但是,我得到以下错误:
[g++默认值#1]错误:功能样式转换没有匹配的转换
Bazz和Ack定义:
我认为模板化的C'Tor造成了歧义。因此,var_t不知道它是否应该构造Fum
或Fum
。但我不确定。那么我该如何解决这个问题呢?有一个适当的过载来进行安放施工
特别是:
template< class T, class... Args >
constexpr explicit variant(std::in_place_type_t<T>, Args&&... args);
模板
constexpr显式变量(std::in_place_type_t,Args&…Args);
因此,您的代码可以通过以下方式修复:
var_t(std::in_place_type<Fum<Ack>>, std::string("Hello, World!"));
var_t(std::in_place_type,std::string(“Hello,World!”);
我建议您减少显示的代码。这有点冗长,大多数方法定义在这个问题的上下文中都没有用处。也许你想看看变量构造?
typedef std::variant< Fum<Bazz>, Fum<Ack> > var_t;
// Fum forwards string to Ack as expected and creates Ack emplace.
int main() {
Fum<Ack>(std::string("Hello, World!"));
}
// >>>> Ack Main C'Tor
// >>>> Fum C'Tor
int main() {
var_t((std::string("Hello, World!")));
}
// [g++ default #1] error: no matching conversion for functional-
// style cast
template< class T, class... Args >
constexpr explicit variant(std::in_place_type_t<T>, Args&&... args);
var_t(std::in_place_type<Fum<Ack>>, std::string("Hello, World!"));