C 替代成员定义
c++ alternative member definition
在C 中,您可以以下方式定义成员:
struct test {
using memberType = int(int);
/*virtual*/ memberType member;
};
int test::member(int x) { return x; }
使用C 14,是否有任何方法可以定义类定义中的成员,例如使用lambda?
我认为这是不可能的,但是如果成员是函数的指针,您可以做到
struct test {
int (*member)(int) = [](int x){return x;};
};
由于带有空捕获列表的lambda实际上是常规功能
我想到使用std::function<>
对象的唯一方法,但是您必须通过实例(无法想到如何自动绑定它。)
struct foo {
using T = int(foo&, int);
int b;
std::function<T> x = [](foo& f, int a) { return a * f.b; };
};
您想写的东西:
struct test {
auto member_impl = [this]() {
};
};
这将失败(至少)三个计数:
您无法声明非静态成员
auto
。您无法命名lambda的类型(因此必须是自动)
this
在定义类时不可用。
简短答案,否。
但是您可以写:
struct test {
auto member_impl() {
};
};
大约很短。
我猜5.1.5/3是阻止您以使用lambda的方式使用lambda的方法,很抱歉:
[...]在未评估的操作数(条款[expr])中,在模板argument,在typedef声明中或在函数的声明中,不得出现lambda-excression(条款[expr])或功能模板其功能主体和默认参数之外。[注意:目的是防止Lambdas出现在签名中。 - 终点注] [...]
也就
template<typename F>
struct S;
template<typename R, typename... Args>
struct S<R(Args...)> {
using member = R(Args...);
R operator()(Args...) { return R{}; }
member M;
};
template<typename R, typename... Args>
R S<R(Args...)>::M(Args...) { return R{}; }
int main() { S<void(int)> s; }
相关文章:
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- C++令牌定义成员
- 在没有类定义的标头中定义成员变量
- 如何在类的构造函数中定义成员向量的大小
- 如何在C++中动态定义成员函数
- C++ Boost.Serialization - 用户定义成员的非侵入式序列化
- C++类 - 使用公共变量并在类外定义成员函数
- G++ - 对已定义成员函数的未定义引用
- 在哪里以及如何定义成员变量?在头文件还是实现文件中?
- 是否可以修改STL并自定义成员函数
- 从 boost::mpl:vector 类型列表中定义成员变量
- 在构造对象时定义成员函数
- 为什么定义成员函数指针变量需要类名
- 复制构造函数中的 C++ 用户定义成员
- 如何根据类参数定义成员类运算符
- 使用指向未定义成员函数的指针时的未定义引用
- 如何在运行时定义成员数组大小
- C++-在模板类之外但在头中定义成员函数
- c++在不知道对象类型的情况下定义成员函数指针
- 在特定偏移量中定义成员的结构