Специализация шаблонов сложными типами
От:
SaZ
Дата: 27.06.11 15:41
Оценка:
Возможно ли в С++ создать конструкцию вроде следующей?
template < const char * const T >
class Token {};
Token< "%something%" > token;
Подскажите, как лучше сделать такой велосипед или лучше пересмотреть всю конструкцию? Пишется класс для того, чтобы генерировать некоторые строки по заданному шаблону.
Re: Специализация шаблонов сложными типами
От:
Erop
Дата: 27.06.11 15:53
Оценка:
+1
Здравствуйте, SaZ, Вы писали:
SaZ>SaZ>template < const char * const T >
SaZ>class Token {};
SaZ>Token< "%something%" > token;
SaZ>
SaZ>Подскажите, как лучше сделать такой велосипед или лучше пересмотреть всю конструкцию? Пишется класс для того, чтобы генерировать некоторые строки по заданному шаблону.
В С++, во всяком случае пока, нельзя параметризовывать шаблон указателем на объект со внутренним связыванием.
Так что ничего не выйдет.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Специализация шаблонов сложными типами
От:
SaZ
Дата: 27.06.11 16:03
Оценка:
Пока остановился на следующем варианте, он удовлетворяет моим потребностям:
template < const char * T >
class Token
{
void Foo();
};
char DateTime[] = "%datetime%" ;
template <>
Token< DateTime >::Foo()
{
// TODO
}
Re: Специализация шаблонов сложными типами
От:
YuriV
Дата: 27.06.11 16:52
Оценка:
Здравствуйте, SaZ, Вы писали:
SaZ>Возможно ли в С++ создать конструкцию вроде следующей?
SaZ>SaZ>template < const char * const T >
SaZ>class Token {};
SaZ>Token< "%something%" > token;
SaZ>
SaZ>Подскажите, как лучше сделать такой велосипед или лучше пересмотреть всю конструкцию? Пишется класс для того, чтобы генерировать некоторые строки по заданному шаблону.
Только вот так:
template < const char * T >
class Token
{
public :
Token() : _p(T) {}
void Foo();
private :
char const * _p ;
};
char DateTime[] = "%datetime%" ;
template <const char * T>
void Token<T>::Foo()
{
// TODO
}
int _tmain(int argc, _TCHAR* argv[])
{
Token<DateTime> token;
token.Foo();
return 0;
}
Re[2]: Специализация шаблонов сложными типами
От:
SaZ
Дата: 27.06.11 17:14
Оценка:
Здравствуйте, YuriV, Вы писали:
YV>Только вот так:
Да, именно так и было сделано.
Re[2]: Специализация шаблонов сложными типами
От:
Alexey F
Дата: 27.06.11 17:28
Оценка:
Здравствуйте, YuriV, Вы писали:
YV>Только вот так:
YV>template < const char * T >
[...]
YV> Token() : _p(T) {}
YV> char const * _p ;
[...]
YV>template <const char * T>
YV>void Token<T>::Foo()
YV>{
YV> // TODO
YV>}
YV>
А зачем выделенное, если во всём классе есть доступ к строке через параметр шаблона T?
Re[3]: Специализация шаблонов сложными типами
От:
YuriV
Дата: 27.06.11 18:05
Оценка:
+1
Здравствуйте, Alexey F, Вы писали:
AF>Здравствуйте, YuriV, Вы писали:
YV>>Только вот так:
AF>YV>>template < const char * T >
AF>[...]
YV>> Token() : _p(T) {}
YV>> char const * _p ;
AF>[...]
YV>>template <const char * T>
YV>>void Token<T>::Foo()
YV>>{
YV>> // TODO
YV>>}
YV>>
AF> А зачем выделенное, если во всём классе есть доступ к строке через параметр шаблона T?
В общем не нужно конечно, забыл убрать...
Re[2]: Специализация шаблонов сложными типами
От:
Abyx
Дата: 27.06.11 19:53
Оценка:
Здравствуйте, SaZ, Вы писали:
SaZ>Пока остановился на следующем варианте, он удовлетворяет моим потребностям:
SaZ>SaZ>template < const char * T >
SaZ>class Token
SaZ>{
SaZ> void Foo();
SaZ>};
SaZ>char DateTime[] = "%datetime%" ;
SaZ>template <>
SaZ>Token< DateTime >::Foo()
SaZ>{
SaZ> // TODO
SaZ>}
SaZ>
если не нужна мутабельность строки, то лучше
extern const char DateTime[] = "%datetime%" ;
In Zen We Trust
Re[4]: Специализация шаблонов сложными типами
От:
SaZ
Дата: 28.06.11 09:28
Оценка:
Здравствуйте, YuriV, Вы писали:
YV>Здравствуйте, Alexey F, Вы писали:
AF>>YV>>> Token() : _p(T) {}
YV>>>
AF>> А зачем выделенное, если во всём классе есть доступ к строке через параметр шаблона T?
YV>В общем не нужно конечно, забыл убрать...
Я к QString привожу, так что мне нужно
Re[3]: Специализация шаблонов сложными типами
От:
SaZ
Дата: 28.06.11 09:33
Оценка:
Здравствуйте, Abyx, Вы писали:
A>если не нужна мутабельность строки, то лучше
A>A>extern const char DateTime[] = "%datetime%" ;
A>
extern вынес в заголовочный файл, объявление и инициализацию в .cpp файл.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить