【发布时间】:2013-07-28 02:06:14
【问题描述】:
我想知道以下情况是否可能。
我有一个类A,它有一些数据成员,其中一个是容器(假设是一个简单的数组)。
现在对于A 的构造函数,我想传递一个lambda 函数来初始化该类的数据成员。
我希望用户能够编写自己的初始化例程并将其应用于类。
例如,考虑A 的这个构造函数,它有两个参数。
第一个是数组的大小,第二个是 lambda 函数。
A(std::function<void (self_type)> f) {
f(*this);
}
现在我将创建一个对象,如下所示:
A a([](A a) {
//do something here to initialize array and data members
});
这样,用户可以执行自己的初始化,而不是使用类提供的构造函数或其他填充函数。
这可能使用一些技巧吗?如果我能以某种方式在 lambda 函数中使用this,那就更好了。
例如-
A a([]() {
//do something here to initialize array and data members
this->_n = 100; // where _n is some data member.
});
欢迎任何可能的解决方案!
【问题讨论】:
-
一个 lambda 函数可以做任何其他函数可以做的任何事情,有些人甚至会说他们有更多的功能,因为变量捕获
-
是的,但我无法访问班级的私人成员。有没有办法让我可以访问它?此外,我将无法在 lambda 函数中使用
this(考虑到当前情况。我必须在函数调用中显式传递*this(这是我目前能看到的唯一方法)。跨度> -
然后您可以使用 setter 和 getter,或者让用户将 lambdas 传递给执行此操作的另一个函数
-
我想做的是直接访问会员。它只是在对象初始化期间。 Getter 和 setter 可能不会一直存在于所有数据成员(可能受到限制)。我有自己的类,我想做的就是直接向用户提供初始化机制。这可能吗?
-
为什么宁愿让用户传递初始化函数而不是让用户传递数据成员的值?