如何创建带有空可变参数模板参数的可推导别名

问题描述

假设一个可变参数类通过模板参数提供自定义

template <bool Option,class... Args>
struct basic_my_class{};

以及一些别名以简化类的使用。

template <class... Args>
using my_class = basic_my_class<false,Args...>;

template <class... Args>
using my_other_class = basic_my_class<true,Args...>;

如果没有尖括号,用户将无法再实例化课程。

// No can do,cannot deduce empty parameter pack.
my_class m;

// User must use.
my_class<> m;

这使API变得不那么美观,对初学者也不太友好。

std::string和其他标准别名不会遇到此问题,因为它们使用认模板。但是,我不能将认参数分配给我的bool选项,因为参数包必须紧随其后。而且在使用my_other_class时仍然会遇到问题。

是否可以解决此问题,以便用户只需输入my_class m;

注意:我已经尝试过公共继承,但是继承的构造函数似乎不起作用,因为编译器试图将ctors参数推导为可变参数模板参数。

template <bool Option,class... Args>
struct basic_my_class {
    basic_my_class(int);
};

template <class... Args>
struct my_class : public basic_my_class<false,Args...> {
    using basic_my_class<false,Args...>::basic_my_class;
};

// No can do,'cannot deduce template parameter ...'
my_class m{ 42 };

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)