未定义模板'std::function::__1::void(int,int)的隐式实例化

问题描述 投票:0回答:1
#include <QApplication>
#include <unordered_map>
#include <memory>
#include <QDebug>
#include <functional>
template<typename T,typename ...args>
class TestClassA
{
public:

    static TestClassA& instance()
    {
        static TestClassA a;
        return a;
    }

    void Add(int a,T* b,void(T::*)(args...));

    void Remove(int a);

    std::unordered_map<int,std::function<void(*)(args...)>> m_test{};
};

template<typename T, typename ...args>
void TestClassA<T,args...>::Add(int a, T *b, void (T::*pf)(args...))
{
    this->m_test.emplace(a,std::bind(pf,b));
}

template<typename T, typename ...args>
void TestClassA<T,args...>::Remove(int a)
{
    this->m_test.erase(a);
}



class TestClassB
{
public:
    void TestTwo(int,int)
    {
        qDebug()<<"TestTwo";
    };
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    auto testCBIns=new TestClassB();

    TestClassA<TestClassB,int,int>::instance().Add(1,testCBIns,&TestClassB::TestTwo);

    TestClassA<TestClassB>::instance().Remove(1);

    MainWindow w;
    w.show();
    return a.exec();
}

大家好,我目前与这些工作了很长时间, 我试图将成员函数设置为std::unordered_map的值。但是,编译器总是报告与标题无关的消息,我无法解决它,请给我帮助,谢谢。

c++ qt templates instantiation implicit
1个回答
0
投票

在过去的几天里,这个问题没有进一步的反馈,@NathanOliver 提供的我的问题的解决方案已经解决。感谢您耐心解答我的问题,谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.