相关疑难解决方法(0)

可以在头文件中使用lambda违反ODR吗?

可以在头文件中写入以下内容:

inline void f () { std::function<void ()> func = [] {}; }
Run Code Online (Sandbox Code Playgroud)

要么

class C { std::function<void ()> func = [] {}; C () {} };
Run Code Online (Sandbox Code Playgroud)

我想在每个源文件中,lambda的类型可能不同,因此包含的类型std::function(target_type的结果会有所不同).

这是一个ODR(一个定义规则)违规,尽管看起来像一个共同的模式和合理的事情?第二个示例是每次都违反ODR还是仅在头文件中至少有一个构造函数?

c++ lambda one-definition-rule language-lawyer c++11

68
推荐指数
2
解决办法
4182
查看次数