2016-01-29 4 views
1

У меня есть класс, который имеет некоторые методы. Я хочу использовать шаблон только для одного метода, а не для всего класса. Могу ли я это сделать?C++ шаблоны в классе

class Test { 
    private: 
    int i; 
    public: 
    Test(int i); 
    int getVal(); 
    void setVal(int i); 

    template <class Type> 
    int testTemplate(Type val); 
}; 
+1

Вы бы попробовали? – ForEveR

+0

Должно быть законным. Скомпилируйте и запустите его, тогда вы можете сказать нам, можете ли вы это сделать :) – swinefish

+0

Его работа) Но я хочу знать, это плохое решение или нет?) – Mike

ответ

1

Это совершенно законно и используется во многих случаях, например, для шаблонов функций преобразования. См. Это для получения дополнительной информации: http://en.cppreference.com/w/cpp/language/member_template

Просто не забудьте написать это определение функции как в строке, так и по крайней мере в том же файле, иначе он не сможет скомпилировать. Кроме того, если в вашем проекте нет вызова этой функции, он не будет сгенерирован, что позволит вам сэкономить некоторое пространство.

+0

На самом деле можно писать шаблонные функции в отдельном файле с помощью немного обман. Вместо более обычного '#include foo.h' в верхней части файла cpp вы можете' #include foo.cpp' в нижней части файла заголовка. – swinefish

+0

@swinefish: Не включайте ** cpp **, renamethe файл должен быть .hxx или .inl. – Jarod42

+0

В моем предыдущем учреждении мы использовали .imp (для реализации), но вы правы. – swinefish

0

Согласно комментариям, этот код вполне законный. Он должен компилироваться и работать (если правильно реализован). Что касается хорошего решения, все в порядке. Если это единственная функция, которую вам нужно запланировать, то только сделайте это. Если вы сделаете весь класс шаблоном, он может добавить дополнительные накладные расходы, которые вам не нужны. Итак, как вы это сделали, просто выполните одну функцию.

0

Это законно. Независимо от того, объявляете ли вы шаблон вне или внутри класса, просто используйте тип, определенный в шаблоне, только в методе, и этот шаблон будет использоваться для единственного метода, который вам нужен.

Смежные вопросы