C++ 指向返回变量类型引用的函数的指针元组

C++ 指向返回变量类型引用的函数的指针元组,c++,variadic-templates,c++14,stdtuple,C++,Variadic Templates,C++14,Stdtuple,不要让问题标题吓跑你!我相信这只是一个语法问题 我有这门课 template<typename ... Types> class test_class{ public: template<typename T> T &get(){return std::get<T>(m_values);} template<typename T> void set(T &&a

不要让问题标题吓跑你!我相信这只是一个语法问题

我有这门课

template<typename ... Types>
class test_class{
    public:
        template<typename T>
        T &get(){return std::get<T>(m_values);}

        template<typename T>
        void set(T &&t){std::get<T>(m_values) = t;}

        // scary part
        std::pair<std::tuple</* trouble */ Types&(*)()...>, std::tuple<void(*)(Types)...>> &getters_setters(){
            static std::pair<std::tuple<Types&&(*)()...>, std::tuple<void(*)(Types)...>> ret{
                std::make_tuple(get<Types>...),
                std::make_tuple(set<Types>...)
            };
            return ret;
        }

    private:
        std::tuple<Types...> m_values;
};
模板
班级考试{
公众:
模板
T&get(){return std::get(m_值);}
模板
空集(T&&T){std::get(m_值)=T;}
//可怕的部分
std::pair&getters\u setters(){
静态std::pair-ret{
std::make_tuple(get…),
std::生成元组(集合…)
};
返回ret;
}
私人:
std::元组m_值;
};

并且想知道模板参数包扩展的正确语法,这样我就可以得到
T&get()
函数指针的元组。

您的省略号放在正确的位置,您只需要确保类型确实匹配

  • 您的getter和setter是成员函数,因此需要使用指向成员函数类型的指针:
    Types&(test_class::*)()…
    <代码>&测试类::获取…

  • set
    采用右值引用:
    void(测试类::*)(类型和).

  • 产生的代码;按照gcc 4.9.1进行编译:

        std::pair<std::tuple<Types&(test_class::*)()...>,
                std::tuple<void(test_class::*)(Types&&)...>>&
        getters_setters()
        {
            static std::pair<std::tuple<Types&(test_class::*)()...>,
                    std::tuple<void(test_class::*)(Types&&)...>> ret{
                std::make_tuple(&test_class::get<Types>...),
                std::make_tuple(&test_class::set<Types>...)
            };
            return ret;
        }
    
    std::pair& getters_setters() { 静态std::pair-ret{ std::make_tuple(&test_class::get…), std::make_tuple(&test_class::set…) }; 返回ret; }
    Oh,右值引用部分是一个输入法,创建类的实例并调用方法;对我来说失败了:/Hmm,我的代码肯定还是有问题。我只是从你的链接上复制粘贴代码,这比试图找到错误要容易得多。