【发布时间】:2018-11-22 04:07:12
【问题描述】:
在我的 TClass<T>::foo() 函数中,当且仅当 T 是函数类型时,我想调用 T 实例。
#include <iostream>
#include <functional>
template<class T>
struct TClass
{
TClass(T value) : value(value) {}
T value;
void foo()
{
// if(value is std::function)
// call function;
}
};
int main()
{
TClass<int> t1{0};
t1.foo();
TClass<std::function<void()>> t2{[](){ std::cout << "Hello, World!\n"; }};
t2.foo();
}
我该怎么做?
【问题讨论】:
-
“函数类型” - 仅限
std::function?函数指针?拉姆达斯?函数类型(void(int))?重载operator()的类? -
我不知道这个变化@YSC。这是相当可观的。
-
@Barry 你会回答原始状态的问题吗?
-
不直接相关,但 C++17 有 std::invoke,您可能在这种情况下会觉得有用/有趣。
标签: c++ c++11 templates sfinae typetraits