问题描述
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 (将#修改为@)