Можно ли ссылаться на пользовательский шаблон преобразования в объявлении использования? - PullRequest
6 голосов
/ 22 октября 2019

В классе B, унаследованном от класса A, можно использовать объявление using для переноса членов A в B, даже шаблонов, например:

struct A {
    template <typename T>
    void foo();
};

struct B : private A {
    using A::foo;
};

Но можно ли это сделать для шаблонов конвертации?

struct A {
    template <typename T>
    operator T();
};

struct B : private A {
    using A::operator /* ??? */;
};

Кажется, что нет никакого способа обратиться к шаблону по имени, но я бы хотел оказаться ошибочным или получить некоторые разъяснения.

1 Ответ

2 голосов
/ 22 октября 2019

В качестве обходного пути вы можете привести к базовому классу и преобразовать его явно:

struct A {
    template <typename T>
    operator T() {
        return T{};
    }
};

struct B : private A {
    template <class T>
    operator T() {
        return static_cast<T>(static_cast<A&>(*this));
    }
};

int main() {
    A a;
    B b;
    int i_a = a;
    int i_b = b;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...