1

ラムダをコンストラクターに渡そうとしています:

#include <functional>
#include <exception> 

template<typename R>
class Nisse
{
    private:
        Nisse(Nisse const&)             = delete;
        Nisse(Nisse&&)                  = delete;
        Nisse& operator=(Nisse const&)  = delete;
        Nisse& operator=(Nisse&&)       = delete;
    public:
        Nisse(std::function<R> const& func) {}
};

int main()
{
    Nisse<int>   nisse([](){return 5;});
}

コンパイルすると、次のエラーメッセージが表示されます。

Test.cpp: In function ‘int main()’:
Test.cpp:19:39: error: no matching function for call to ‘Nisse<int>::Nisse(main()::<lambda()>)’
Test.cpp:19:39: note: candidate is:
Test.cpp:14:9: note: Nisse<R>::Nisse(const std::function<R>&) [with R = int]
Test.cpp:14:9: note:   no known conversion for argument 1 from ‘main()::<lambda()>’ to ‘const std::function<int>&’
4

1 に答える 1

5

テンプレート引数のタイプstd::functionが間違っています。使ってみてください

Nisse(std::function<R()> const& func) {}

具体的には、テンプレート引数は関数型である必要がありますが、渡したのは目的の戻り型だけでした。

于 2013-02-14T01:37:04.950 に答える