可变参数模板无法识别方括号初始化程序列表?

问题描述

我有一个仅包含公共成员和由编译器提供的认构造函数自定义类(空构造函数和简单的方括号初始化列表。它还有一个静态可变参量模板化的“ 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 (将#修改为@)