小编Lya*_*yar的帖子

有没有办法删除可变参数模板方法的最后一个模板参数?

我正在努力在 C++11 中创建一个简单的反射器,它将实例函数的函数指针存储为:

static std::unordered_map<std::string, std::pair<void(EmptyClass::*)(void), int>>* methods;
template<typename ClassType, typename returnType, typename... Args>
static void RegistFunction(std::string name, returnType(ClassType::* func)(Args... args)) {
    (*methods)[name] = std::make_pair((void(EmptyClass::*)())func, sizeof...(Args));
}

template<typename ReturnType, typename ClassType, typename... Args>
static ReturnType ExecuteFunction(ClassType* object, std::string name, Args... args) {
    if (object == NULL) return;
    ReturnType(ClassType:: * func)(Args...) = (ReturnType(ClassType::*)(Args...))(*methods)[name].first;
    return (object->*func)(std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

但是当我想调用ExecuteFunction时,参数的数量可能比函数指针实际接受的数量多。所以我需要从参数列表的尾部删除一些参数,但似乎我只能从头部删除。

template<typename ReturnType, typename ClassType, typename Arg, typename... Args>
    static ReturnType ExecuteFunction(ClassType* object, std::string name, Arg arg, Args... args) {
        if (sizeof...(Args) + …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ c++11

6
推荐指数
1
解决办法
129
查看次数

标签 统计

c++ ×1

c++11 ×1

visual-c++ ×1