gpt4 book ai didi

c++ - 如何确定 C++11 成员函数的返回类型

转载 作者:可可西里 更新时间:2023-11-01 18:15:54 27 4
gpt4 key购买 nike

我正在尝试确定各种 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com