我试图确定各种C++成员函数的返回类型。我知道可以使用decltype和std::declval来做到这一点,但是我在语法上遇到了问题,并找到了有用的示例。下面的TestCBClass显示了一个哑类的示例,该类包含静态和普通成员函数的混合-带和不带参数和返回类型。根据所讨论的方法,我希望能够从各种方法中的每一个声明一个返回类型的 vector 。

在我的应用程序中,这些方法是std::async的回调,我需要一个std::future<return types>的 vector 。我尝试了各种声明,例如decltype(std::declval(TestCBClass::testStaticMethod))(我不确定方法名称之前是否需要&)。这种语法是不正确的-当然不会编译,但是我认为它应该使用的方法。

class TestCBClass {
public:
    TestCBClass(const int& rValue = 1)
        : mValue(rValue) {
        std::cout << "~TestCBClass()" << std::endl;
    }
    virtual ~TestCBClass() {
        std::cout << "~TestCBClass()" << std::endl;
    }
    void testCBEmpty(void) {
        std::cout << "testCBEmpty()" << std::endl;
    }
    int testCBArgRet(const int& rArg) {
        std::cout << "testCBArgRet(" << rArg << ")" << std::endl;
        mValue = rArg;
    }
    static void testCBEmptyStatic(void) {
        std::cout << "testCBEmptyStatic()" << std::endl;
    }
    static void cbArgRetStatic(const SLDBConfigParams& rParams) {
        std::lock_guard<std::mutex> lock(gMutexGuard);
        std::cout << rParams.mPriority << std::endl;
    }
    static std::string testStaticMethod(const PriorityLevel& rPrty) {
        return "this is a silly return string";
    }
private:
    int mValue;
};

最佳答案

如果您希望列出参数类型而不是相应的伪值,则也可以使用std::result_ofdecltype,如下所示:

#include <iostream>
#include <utility>
#include <type_traits>

struct foo {
  int    memfun1(int a) const { return a;   }
  double memfun2(double b) const { return b; }
};

int main() {
  std::result_of<decltype(&foo::memfun1)(foo, int)>::type i = 10;
  std::cout << i << std::endl;
  std::result_of<decltype(&foo::memfun2)(foo, double)>::type d = 12.9;
  std::cout << d << std::endl;
}

DEMO here.

关于c++ - 如何确定C++ 11成员函数的返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26107041/

10-11 23:11
查看更多