[英]Return value type for class member function
我有幾個帶有方法的A
類,例如get_value()
,它們返回不同類型的值。 還有一個B
類,它使用方法value()
返回一個值。 例如:
struct A_like1 {
int get_value() const { return 10; }
};
struct A_like2 {
char get_value() const { return 'a'; }
};
struct B
{
float value() const { return 2.5; }
};
現在,我需要一個函數來檢索這些類的值。 我有一個功能:
template<typename T>
auto get_value(const T & t) -> result_of<decltype(&T::get_value)(T)>::type
{
return t.get_value();
}
從VS2010開始,它給了我很多編譯錯誤:
Error 1 error C2061: syntax error : identifier 'type' c:\_data\work\vmxi\c++\vox\vox\template_specialization.h 51
對於B
我有一個過載,可以正常工作。 問題是,如何使get_value()
與result_of<>()
?
PS嗯,我剛剛意識到我可以使用-> decltype(T().get_value())
代替,效果很好。 但是為什么result_of<>()
不起作用? 此外,我能夠在.cpp
文件中聲明一個變量:
result_of<decltype(&A_like1::get_value)(A_like1)>::type i=0;
關鍵字typename
可用於聲明從屬名稱(如std::result_of<T>::type
)是類型。 否則,我認為假設std::result_of<T>::type
是數據成員。 在C ++ 14中,有幾種類型特征已得到using
別名,其中包括適合您的typename
關鍵字。 這些別名始終與trait具有相同的名稱,后綴為_t
。
嘗試:
typename result_of<decltype(&T::get_value)(T)>::type
或者,使用C ++ 14:
result_of_t<decltype(&T::get_value)(T)>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.