c++ - 从 std::function 复制模板参数

标签 c++ c++11

我想创建一个模板类,其变量模板参数与给定的 std::function 相同。例如

template <typename T>
struct function_traits : public function_traits<decltype(&T::operator())> {};

template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const> {
    template <template<typename... TArgs> class T>
    using ArgsCopy = T<Args...>;
};

template <typename... Args>
class _forwarder {
public:
    using cb = std::function<void(Args...)>;

    void operator()(Args... args) {
        my_cb(args...);
    }

private:
    cb my_cb;
};

template <typename T>
using Forwarder = function_traits<T>::ArgsCopy<_forwarder>;

然后我将按如下方式使用此类

using cb_test = std::function<void(int, float, std::string)>;
Forwarder<cb_test> fwd;
fwd(5, 3.2, "hello");

Visual Studio 引发编译错误:错误 C2061:语法错误:标识符“ArgsCopy”。我该如何解决这个问题?

最佳答案

微软的编译器并不完全遵循这里的标准,添加template应该可以:

template <typename T>
using Forwarder = function_traits<T>::template ArgsCopy<_forwarder>;

但是如果您希望代码可移植,请添加typename:

template <typename T>
using Forwarder = typename function_traits<T>::template ArgsCopy<_forwarder>;

关于c++ - 从 std::function 复制模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40139802/

相关文章:

c++ - 指示 GCC 链接为 C++

c++ - 具有一个默认值局部参数的函数

c++ - 是否有与 WaitforSingleObject 等效的 C++?

c++ - 在头文件中使用 `const char thing[] = "foo";`?

c++ - 赛格温 : Installing quantlib in cygwin

c++ - 如何从单链表中删除每第 10 个节点?

c++ - reference_wrapper 不会相应地更改地址

C++ 结构未通过 POD 测试

c++ - libmediainfo 有替代方案吗?

c++ - 与我的 abs() 相比,C++ math.h abs() 有什么不同