【发布时间】:2017-10-11 18:15:11
【问题描述】:
将 *this 传递给基类构造函数是否有效?
template<class Lambda>
struct EmptyL : Lambda
{
EmptyL() : Lambda(*this) //<- is this valid c++?
{ }
};
int main () {
auto l = []() { return 34; };
auto a = EmptyL<decltype(l)>();
return a();
}
EDIT1:
- 我为什么要这样做?因为 lambda 表达式生成的 ClosureType 不是默认可构造的。通过这个“技巧”,我可以默认构造这样的 ClosureType。
- 此外,模板参数
Lambda的要求是,它必须为空 =>static_assert(std::is_empty_v<Lambda>)
【问题讨论】:
-
您为什么需要这样做?你的基类已经有它的
this -
语法有效但没有意义,为什么要从未初始化的结构中复制?
-
注意
*this还没有被初始化。很难想象这会有用或做你想做的事情。 -
这是一个可怕的问题。当然,从技术上讲,是的,将
*this传递给基类构造函数是可以的,但这甚至不会使您的示例变得正常,并且将“是”作为实际答案发布会误导性地积极有害。这就像用unsigned f() { unsigned u1, u2; return u1 + u2; }的例子询问“可以添加两个无符号整数吗”。 -
这里有可能提出一个好问题,但你的例子有缺陷。你真正想做什么?