有什么方法可以实现一个接受括号而不是括号的构造函数?
前
class MyString
{
char *x;
int n;
};
int main()
{
MyString instance[10];
return 0;
}
顺便说一下,我理解括号的概念,我们不能声明这样的方法。 但我只是想知道是否有办法做到这一点?
答案 0 :(得分:2)
没有。只能使用()
或{}
调用构造函数。您可以通过重载operator[]
创建一个带有一个参数的工厂函数,但这会滥用一种违反最佳做法并会违反用户期望的功能。
这是我的意思(并且不推荐):
struct foo {
int value = {};
};
struct foo_factory {
foo operator[](int v) const {
return foo{v};
}
};
int main() {
foo f = foo_factory()[42];
}
答案 1 :(得分:1)
定义数组时,您正在创建的是您创建该类的多个实例。
例如你的定义
MyString instance[10];
定义了十个不同的MyString
个对象。即构造函数将被调用十次,每个对象一次。
如果你的目的是创建一个MyString
对象,并将值10
传递给它,那么你必须使用括号或大括号。当然,实现一个以值为参数的适当构造函数。
并且没有什么可以做的改变它,它是基本语言语法的一部分。