2017-09-22 6 views
1

ラムダ関数を使用してテンプレートクラス関数のエイリアスを作成できますか?このような何か:C++はテンプレート関数の特殊化としてλ関数を使用します

#include <iostream> 
using namespace std; 

int calcDouble(int a) { return a * 2; } 
int calcMultiply_10(int a) { return a * 10; } 

struct foo 
{ 
    template<void (*func)(int)> 
    int generic(int value) 
    { 
     return func(value); 
    } 

    static auto double_10 = [this] { generic<calcDouble>(10); }; 
    static auto double_20 = [this] { generic<calcDouble>(20); }; 
    static auto multiply_10_20 = [this] { generic<calcMultiply_10>(20); }; 
} 


int main() { 
    foo f; 

    cout << "double_10: " <<f.double_10() << endl; 
    cout << "double_20: " <<f.double_20() << endl; 
    return 0; 
} 
+2

ない "これは" 静的メンバのために定義はありません。 – Oliv

答えて

7

あなたの特定の例は、コンパイルされませんし、それがなかった場合には危険である - 値によってthisを取り込むには、すぐにクラスがコピーされる/捕獲thisが間違っを指します移動したことを意味しまたは無効なメモリ位置です。

だけでメンバ関数を使用します。

auto double_10()  { return generic<calcDouble>(10); } 
auto double_20()  { return generic<calcDouble>(20); } 
auto multiply_10_20() { return generic<calcMultiply_10>(20); } 

live example on wandbox

関連する問題