Перегрузка оператора преобразования шаблоном - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу иметь возможность конвертировать myclass в любые базовые структуры (double, int, float и т. Д.). Я использовал:

template<class T> myclass::operator T() {
    return (T)a;
};

Но выдает ошибку при запуске. Но если я использую:

myclass::operator double() {
    return (double)a;
};

(а является частной переменной) код работает.

Как я могу использовать шаблон в этой ситуации?

Спасибо

1 Ответ

0 голосов
/ 15 ноября 2018

Чтобы это работало вообще, a должно быть конвертировано в double, int и float.Тогда ваш первый пример должен работать просто отлично.Я добавил дополнительное усиление static_assert.

#include <type_traits>

class myclass {
    double a = 1.0;
public:
    template<class T> operator T() {
        static_assert(std::is_convertible_v<decltype(a),T>);
        return static_cast<T>(a);
    };
};

int main() {
    myclass m;

    int i = m;
    float f = m;
    double d = m;
  //std::string s = m; // BOOM!
}

Live on Wandbox

...