наследовать сигнал в libs - PullRequest
0 голосов
/ 31 мая 2018

Я использую libsourcey lib для обучения.Я пытаюсь написать новый класс, который наследует класс с именем Сигнал .

в libsourcey

template <typename RT> class Signal;
template <typename RT, typename... Args> class Signal<RT(Args...)> {...}

и мой путь

template <typename RT> class NewSignal;
template <typename RT, typename... Args> class NewSignal<RT(Args...)> : public Signal<RT(Args...)> {...}

, ноЯ не могу получить доступ к любому свойству класса Signal, а также атрибута (хотя я изменяю атрибут для общественности).Отчет Complier (затмение): was not declared in this scope

Пример

У меня есть 2 класса

класс B

template<class RT> class B;

template<class RT, class... Args>
class B<RT(Args...)> {
public:
    B(int value = 0) : m_i(value) {}
    ~B() {}
    void print() {
        std::cout << "i = " << m_i << std::endl;
    }
    int m_i;
};

класс A

template<class RT> class A;

template<class RT, class... Args>
class A<RT(Args...)> : public B<RT(Args...)> {
public:
    A(int value = 0) : B<RT(Args...)>(value) {}
    virtual ~A() {}
    void print() {
        std::cout << "i = " << 2 * m_i << std::endl;
    }
};

При сборке я получаю ошибку enter image description here

и main.cpp

#include "Aclass.hpp"
#include "Bclass.hpp"

int main(int argc, char* argv[]) {
    B<void(void)> b(1);
    b.print();
    A<void(void)> a(2);
    a.print();
    return 0;
}

Но когда я изменяю std::cout << "i = " << 2 * m_i << std::endl; в классе А на std::cout << "i = " << 2 * B<RT(Args...)>::m_i << std::endl; затем сборка завершена, без ошибок.

Кто-нибудь объяснит, почему отчет компилятора такой.Как я могу унаследовать класс сигнала.Если нет, есть какое-нибудь решение?Спасибо за поддержку.

...