Использование enable_if для сопоставления чисел в качестве параметра функции - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу использовать std::enable_if для создания конструктора, который соответствует числам. Я попробовал следующий код, но конструктор не найден. Основная функция имеет примеры того, как я хочу использовать это. Что я должен изменить, чтобы сделать эту работу?

#include <type_traits>
#include <string>

class A {
public:
    A(const std::wstring&, const std::wstring&)
    {}

    template<typename T>
    A(const std::wstring& n, typename std::enable_if<std::is_arithmetic<T>::value, T>::type v)
    {}
};

int main() {
    A(L"n", 1234); // does not compile
    A(L"n", 2.7); // does not compile
    A(L"n", L"n"); // compiles
    return 0;
}

Ошибка на Ideone : Сбой вывода / замены аргумента шаблона

1 Ответ

0 голосов
/ 30 апреля 2018

Ваш T не подлежит вычету (из-за ::type), один из возможных способов:

template<typename T,
         typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr>
A(const std::wstring& n, T v)
{}
...