Нужно иметь пустую строку в качестве параметра шаблона - PullRequest
2 голосов
/ 21 июня 2011

Я хочу иметь класс, который хранит пару переменных разных типов, но мне нужно передать нулевые или нулевые значения по умолчанию для переменных в качестве параметров шаблона. Я могу сделать это для int или double, но как мне сделать это для строки? Я знаю, что тот C ++ в настоящее время не имеет строковых параметров, но каковы альтернативные конструкции. Мне нужно что-то вроде этого:

#include <iostream>
#include <string>

using namespace std;

template <typename atype, typename btype, atype anull, btype bnull>
class simpleClass {
public:
    atype       var1;
    btype       var2;

    simpleClass<atype, btype, anull, bnull>   *parent;          // pointer to parent node

    simpleClass(); ~simpleClass();
};
template <typename atype, typename btype, atype anull, btype bnull>
simpleClass<atype, btype, anull, bnull>::simpleClass()  {   var1 = anull; var2 = bnull; 
                        parent  = NULL;  }
template <typename atype, typename btype, atype anull, btype bnull>
simpleClass<atype, btype, anull, bnull>::~simpleClass() {}


int main() {
    simpleClass<string, int, "", 0> obj;
    obj.var1 = "hello";
    obj.var2 = 45;
    cout << obj.var2;
    return 0;
}

компилируя это, я получаю

error: ‘struct std::string’ is not a valid type for a template constant parameter

1 Ответ

4 голосов
/ 21 июня 2011

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

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