问题描述
我有一个仅包含公共成员和由编译器提供的默认构造函数的自定义类(空构造函数和简单的方括号初始化列表。它还有一个静态可变参量模板化的“ factory”成员函数,该函数封装了所有类构造函数,但是我发现当我使用方括号初始值设定列表时,可变参数模板不会以某种方式捕获它。
这是什么原因?是否有理由稍微重写一下以解决这种特殊情况,而不必显式声明每个构造函数,包括一个以std::initializer_list
作为参数的构造函数?
class myType {
public:
// myType() {};
// ~myType() {};
double a = -1;
double b = -1;
template< typename... Args >
static std::shared_ptr<myType> create(Args... args) { return std::shared_ptr<myType>(new myType(args...)); };
};
int main(int argc,char const *argv[]) {
myType A; // OK
myType B(A); // OK
myType C{A}; // OK
myType D{3,8}; // OK
myType E({6,9}); // OK
auto F = myType::create(); // OK
auto G = myType::create(A); // OK
auto H = myType::create(*G); // OK
auto I = myType::create({4,7}); // error: no matching function for call to ‘myType::create(<brace-enclosed initializer list>)’
auto J = new myType({4,7}); // OK
delete J;
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)