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!"));