illegal use of explicit template arguments
От: Caracrist https://1pwd.org/
Дата: 15.12.09 13:16
Оценка:
subj...

template<typename T, int b>
void ffff();

template<typename T>
void ffff<T,1>(){}

template<typename T>
void ffff<T,2>(){}



VS2008sp1
~~~~~
~lol~~
~~~ Single Password Solution
Re: illegal use of explicit template arguments
От: Alexander G Украина  
Дата: 15.12.09 13:19
Оценка: 8 (1)
Здравствуйте, Caracrist, Вы писали:

C>subj...


C>
C>template<typename T, int b>
C>void ffff();

C>template<typename T>
C>void ffff<T,1>(){}

C>template<typename T>
C>void ffff<T,2>(){}
C>


C>

C>VS2008sp1

Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.
Русский военный корабль идёт ко дну!
Re[2]: illegal use of explicit template arguments
От: Caracrist https://1pwd.org/
Дата: 15.12.09 13:24
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.


спасибо за пояснение

П.С. Есть какая то особая причина почему это так?
~~~~~
~lol~~
~~~ Single Password Solution
Re[3]: illegal use of explicit template arguments
От: Warturtle  
Дата: 15.12.09 14:12
Оценка: 1 (1)
Здравствуйте, Caracrist, Вы писали:

C>Здравствуйте, Alexander G, Вы писали:


AG>>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.


C>спасибо за пояснение


C>П.С. Есть какая то особая причина почему это так?

Потому что то же самое можно сделать с помощью перегрузки.
Re[4]: illegal use of explicit template arguments
От: Warturtle  
Дата: 15.12.09 14:14
Оценка:
Здравствуйте, Warturtle, Вы писали:

W>Здравствуйте, Caracrist, Вы писали:


C>>Здравствуйте, Alexander G, Вы писали:


AG>>>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.


C>>спасибо за пояснение


C>>П.С. Есть какая то особая причина почему это так?

W>Потому что то же самое можно сделать с помощью перегрузки.
... или шаблонов классов.
Re[4]: illegal use of explicit template arguments
От: Caracrist https://1pwd.org/
Дата: 15.12.09 14:46
Оценка:
Здравствуйте, Warturtle, Вы писали:

C>>П.С. Есть какая то особая причина почему это так?

W>Потому что то же самое можно сделать с помощью перегрузки.

Это не связанные вещи...
~~~~~
~lol~~
~~~ Single Password Solution
Re[5]: illegal use of explicit template arguments
От: Caracrist https://1pwd.org/
Дата: 15.12.09 14:54
Оценка:
Здравствуйте, Warturtle, Вы писали:

W>Здравствуйте, Warturtle, Вы писали:


W>>Здравствуйте, Caracrist, Вы писали:


C>>>Здравствуйте, Alexander G, Вы писали:


AG>>>>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.


C>>>спасибо за пояснение


C>>>П.С. Есть какая то особая причина почему это так?

W>>Потому что то же самое можно сделать с помощью перегрузки.
W>... или шаблонов классов.


struct S1
{
    template<typename T, bool> void F1();
    template<typename T, int> void F2();
    template<typename T, void *> void F3();
    
    static int hmm;
//тут ещё много всяких деклараций, а определения в cpp
};

// а вот это определяет смысл, но не компилируется
template<typename T>
void S1::F1<T, true> (){}
template<typename T>
void S1::F2<T, 1> (){}
template<typename T>
void S1::F3<T, (void*)(&S1::hmm)> (){}

чем советуешь это заменить?
~~~~~
~lol~~
~~~ Single Password Solution
Re: illegal use of explicit template arguments
От: guyos Россия  
Дата: 15.12.09 15:34
Оценка: 8 (1)
Здравствуйте, Caracrist, Вы писали:


/*
template<typename T, int b>
void ffff();

template<typename T>
void ffff<T,1>(){}
*/


Запись типа:
template<typename T>
void ffff<T,1>(){}

не корректна, так как не существует частичной специализации для функций, не зависимо от того являются ли они членами класса или нет.
Лучше написать перегруженную версию с одним маленьким приемом от Андрея Александреску:

template<int v>
struct Int2Type /*Alexandresku*/
{
enum { value = v};
};

И использовать так:

template<typename T>
void ffff(Int2Type<1>){}

template<typename T>
void ffff(Int2Type<2>){}

template<typename T, int b>
void ffff()
{
ffff<T>(Int2Type<b>());
}
с/с++
Re[5]: illegal use of explicit template arguments
От: Caracrist https://1pwd.org/
Дата: 15.12.09 16:29
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Здравствуйте, Warturtle, Вы писали:


C>>>П.С. Есть какая то особая причина почему это так?

W>>Потому что то же самое можно сделать с помощью перегрузки.

C>Это не связанные вещи...

уже пояснили
http://www.rsdn.ru/forum/cpp/3639651.1.aspx
Автор: guyos
Дата: 15.12.09
~~~~~
~lol~~
~~~ Single Password Solution
Re[3]: illegal use of explicit template arguments
От: placement_new  
Дата: 15.12.09 19:25
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>П.С. Есть какая то особая причина почему это так?


Если верить Вандервудру и Джосаттису/Йосаттису... то нет, и это будет в новом стандарте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.