шаблон класса c ++ предотвращает неявное преобразование в функции-члене - PullRequest
0 голосов
/ 20 января 2019

Интересно, возможно ли иметь шаблонный класс, где функции-члены могут вызываться только с точно совпадающим типом шаблона?Пример:

template<typename T>
   struct testClass {
   void testMethod(T testParam) {};
};


int main() {
    testClass<int> testObject;
    int testInt;
    testObject(testInt);         //ok
    testObject.testMethod(1.1f); //compile error, parameter is not int
}

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

Спасибо

1 Ответ

0 голосов
/ 20 января 2019

Если вы можете использовать хотя бы C ++ 11, вы можете delete шаблонный метод с тем же именем

template <typename U>
void testMethod (U const &) = delete;

Таким образом, когда вы вызываете testMethod() с точно Tзначение, не шаблонный метод является предпочтительным;когда вы вызываете testMethod() со значением другого типа, компилятор выбирает шаблон testMethod(), но удаляется, поэтому выдается ошибка компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...