如何在构造函数中声明没有预定义类型的成员变量?

How do I declare a member variable within the constructor that doesn't have a predefined type?

我正在尝试声明一个 class 的成员变量,其类型在编译期间未定义。我读到 this article,其中 C++17 通过修改模板构造函数调用的类型参数来固定模板构造函数。 (我可能读错了,因为我遇到了错误。)

class theClass {
    template <typename UDEF> theClass(UDEF var) : memberVar(var) {}
    auto memberVar{ NULL };
};



int main() {
    int number = 3;
    theClass the(number); // Something something C++17
}


有人有解决方法吗?也许是 new 运算符?这让我很困惑。我遇到超级一般错误:

Error (active)  E0330   "theClass::theClass(UDEF var) [with UDEF=int]" (declared at line 4) is inaccessible ConsoleApplication1```
Error (active)  E1598   'auto' is not allowed here  ConsoleApplication1

编辑:我尝试将模板放在初始化列表中,如下所示: template <typename UDEF> theClass(UDEF var) : UDEF memberVar(var) {} 并且没有得到任何 IntelliSense 错误,但恐怕它不会编译。毕竟它是一个初始化列表,而不是声明列表,对吧?而且奇怪的构造函数模板调用仍然会出错。

模板应该在 class 上,让成员使用模板参数:

template <typename UDEF>
class theClass {
    UDEF memberVar {};
public:
    theClass(UDEF var) : memberVar(var) {}
};

现在您的 main 可以创建一个这样的对象:

int main() {
    int number = 3;
    theClass the(number); // CTAD, C++17
}