我有一门课叫
NameAndTag
。它有构造函数:
NameAndTag();
NameAndTag(std::string name_or_tag);
NameAndTag(boost::uuids::uuid tag) : Tag(tag) {}
现在,我想定义另一个类,其(模板)构造函数采用可变数量的“事物”,这些事物可以传递给
NameAndTag::NameAndTag
。另外,我希望模板类型是隐式的。
我尝试过不同的方法。我想工作的是这个:
template<typename... NameOrTag>
PathToObject(std::enable_if_t<
std::is_constructible_v<NameAndTag, NameOrTag>
, NameOrTag&&>... obj_path);
但是,我认为编译器无法确定
NameOrTag
的类型。当模板不接受任何参数时,编译器说我传递了太多参数。
为了让
NameOrTag
的类型更容易理解,我试过:
template<typename... NameOrTag>
PathToObject(NameOrTag&&... obj_path,
std::enable_if_t<
std::conjunction_v
<
std::is_constructible_v<NameAndTag, NameOrTag>...
>
, bool> dummy = true);
但我想混合包模板和可选参数是行不通的。编译器说没有
PathToObject("name", uuid)
的匹配项。
我想做的事情有意义吗? 我怎样才能做到这一点?我必须使用 C++17...
编辑:我必须使用 C++17。