Определить конкретный случай для шаблонной функции (C ++) - PullRequest
1 голос
/ 04 августа 2010

Так что в моем .h файле у меня есть

template <class T>
void getValue(T *val, int element, int index);

, а затем в моем .cc файле есть функция:

template <class T>
void RParser::getValue(T *val, int element, int index)
{

У меня также есть ее экземпляр:

    template void RParser::getValue<char>(char *val, int element, std::string subrecName);
    template void RParser::getValue<long long>(long long *val, int element, std::string subrecName);
    template void RParser::getValue<float>(float *val, int element, std::string subrecName);
...

это работает, но я хотел бы сделать совершенно другую функцию для std :: string

Я пытался:

template <class std::string>
void RParser::getValue<std::string>(std::string * val, int element, int index)
{

, но это не сработало.

Любые предложения будут с благодарностью,

Спасибо, Джош

Ответы [ 3 ]

4 голосов
/ 04 августа 2010

Не используйте шаблон вообще - просто обычная функция:

void RParser::getValue(std::string * val, int element, int index)
{
}
2 голосов
/ 04 августа 2010

Если вы хотите специализировать шаблон, то синтаксис:

template<> 
void RParser::getValue<std::string>(std::string* val, int element, int index) {}

Но, как говорит ответ Нила, вам не нужно специализировать этот шаблон функции; перегрузка сделает работу:

void RParser::getValue(std::string* val, int element, int index) {}
1 голос
/ 04 августа 2010

Это просто недопустимо в C ++ специализировать функцию-член шаблона класса.Я думаю, в C ++ 00x это было смягчено. выделенный текст

РЕДАКТИРОВАТЬ:

class foo {
    template <typename T> T bar(const T & t){
        return t;
    }

    template <> int bar<int>(const int & t){ 
        return t + 1 ;
    }
};


int main(int c, const char * v[]){
    foo f;
}

при компиляции

 % gcc /tmp/foo.cpp
/tmp/foo.cpp:6: error: explicit specialization in non-namespace scope ‘class foo’
/tmp/foo.cpp:6: error: template-id ‘bar<int>’ in declaration of primary template
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...