gpt4 book ai didi

c++ - 模板、函数指针和 C++0x

转载 作者:可可西里 更新时间:2023-11-01 16:36:02 26 4
gpt4 key购买 nike

我为了解 C++0x 的某些特性而进行的个人实验之一:我正在尝试将函数指针传递给模板函数以执行。最终执行应该发生在不同的线程中。但是对于所有不同类型的函数,我无法使模板正常工作。

#include <functional>

int foo(void) {return 2;}

class bar {
public:
int operator() (void) {return 4;};
int something(int a) {return a;};
};

template <class C>
int func(C&& c)
{
//typedef typename std::result_of< C() >::type result_type;
typedef typename std::conditional<
std::is_pointer< C >::value,
std::result_of< C() >::type,
std::conditional<
std::is_object< C >::value,
std::result_of< typename C::operator() >::type,
void>
>::type result_type;
result_type result = c();
return result;
}

int main(int argc, char* argv[])
{
// call with a function pointer
func(foo);

// call with a member function
bar b;
func(b);

// call with a bind expression
func(std::bind(&bar::something, b, 42));

// call with a lambda expression
func( [](void)->int {return 12;} );

return 0;
}

单独的 result_of 模板似乎无法在类 bar 中找到 operator() 并且我创建的笨拙条件无法编译。有任何想法吗?使用 const 函数会有其他问题吗?

最佳答案

使用 decltype 怎么样?

template <class C>
auto func(C&& c) -> decltype(c()) {
auto result = c();
return result;
}

关于c++ - 模板、函数指针和 C++0x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735294/

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