簡體   English   中英

類成員函數的返回值類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM