Я хочу создать вспомогательный объект шаблона, используя только C ++ 11, который можно использовать для C функций.
Я пытаюсь расширить полученный ответ здесь из функции-оболочки в объект-оболочку, чтобы он мог содержать состояние:
#include <iostream>
#include <functional>
int foo(int a, int b) { return a + b; }
template<typename Fn, Fn fn, typename... Args>
class AltFuncWrapper
{
public:
using result_type = typename std::result_of<Fn(Args...)>::type;
bool enabled{false};
result_type exec(Args... args)
{
if(enabled)
{
std::cout << "Run the real thing";
return fn(std::forward<Args>(args)...);
}
else
{
std::cout << "Return default value";
return result_type{};
}
}
};
int main()
{
AltFuncWrapper<decltype(&foo), &foo> wrapper{};
return 0;
}
Но я получаю следующую ошибку компилятора ( ссылка CE ):
<source>: In instantiation of 'class TestDoubleWrapper<int (*)(const char*, unsigned int)throw (), chmod>':
<source>:68:51: required from here
<source>:30:67: error: no type named 'type' in 'class std::result_of<int (*())(const char*, unsigned int)throw ()>'
using result_type = typename std::result_of<Fn(Args...)>::type;
^