1
我有一个模板类,它带有一个静态成员变量,我想要成为一个lambda函数。为什么它不起作用?将一个lambda函数赋值给静态成员变量(C++)
#include <iostream>
using namespace std;
template <typename T>
class Test {
public:
static constexpr auto lambda = [](T val) -> T {
return val;
};
};
int main() {
cout << Test<int>::lambda(123) << endl;
}
我试着用constexpr和const两个版本。
在第一情况下获得:
../src/test.cpp:8:24: error: ‘constexpr const Test<int>::<lambda(int)> Test<int>::lambda’, declared using local type ‘const Test<int>::<lambda(int)>’, is used but never defined [-fpermissive]
static constexpr auto lambda = [](T val) -> T {
^~~~~~
在第二种情况:
../src/test.cpp:7:20: error: ‘constexpr’ needed for in-class initialization of static data member ‘const Test<int>::<lambda(int)> Test<int>::lambda’ of non-integral type [-fpermissive]
static const auto lambda = [](T val) -> T {
^~~~~~
../src/test.cpp:7:20: error: ‘const Test<int>::<lambda(int)> Test<int>::lambda’, declared using local type ‘const Test<int>::<lambda(int)>’, is used but never defined [-fpermissive]
第一种情况下将正常工作与C++ 17。 – songyuanyao
谢谢!我会找到解决办法。 – biowep
你为什么不简单地使用静态函数? ...毕竟,对于'Test'的每个单独实例都会有不同的结果。 – WhiZTiM