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