2016-01-11 58 views
0

我試圖在函子上使用std::result_of。爲什麼我會得到這些結果?std :: result_of在多態函子上

#include <typeinfo> 

struct my_logical_not { 
    template<typename A> 
    bool operator()(const A &value) const { 
     return !value; 
    } 
}; 

struct my_passthrough { 
    template<typename A> 
    A operator()(A &value) const { 
     return value; 
    } 
}; 

int main() { 


    // this prints 'b': 
    std::cout << typeid(typename std::result_of<my_logical_not(int)>::type).name() << std::endl; 

    // this does not compile: 
    // main.cpp:24:66: error: ‘type’ in ‘class std::result_of<my_passthrough(int)>’ does not name a type 

    std::cout << typeid(typename std::result_of<my_passthrough(int)>::type).name() << std::endl; 

    return 0; 
} 
+3

'my_passthrough(INT)'意味着你要(int)作爲參數的右值,它不綁定到非常量左值引用 –

+0

提示:這裏不需要'typenames' –

+0

我看到..將my_passthrough operator()更改爲「operator() (const A&value)const「修正了它。謝謝! –

回答

1

正如彼得·Skotnicki在評論中指出,上面的代碼工作,一旦my_passthrough改爲採取一個const A的&代替&:

struct my_passthrough { 
     template<typename A> 
     A operator()(const A &value) const { 
      return value; 
     } 
    }; 
+2

或保持原樣並使用'std :: result_of :: type'(請參見&符號) –

相關問題