ラムダ関数にしたい静的メンバー変数を持つテンプレートクラスがあります。それはなぜ機能しないのですか?静的メンバー変数にラムダ関数を割り当てる(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の両方のバージョンを試しましたが、
Iを得る最初のケースで:第2のケースで
../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