如何在构造函数中声明没有预定义类型的成员变量?
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
}
我正在尝试声明一个 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
}