Ограничить множество аргументов шаблона
От: Andy the Toad Россия  
Дата: 10.04.05 12:14
Оценка:
Друзья, подскажите мне вот что — можно ли как-нибудь ограничить множество типов, которые будут участвовать в процессе template argument deducing при использовании шаблонов функций? Вот мне нужно перегрузить, например operator +:
template <typename TYPE>
struct ArgT
{
    //...
};
//--------------
template <typename TYPE>
struct SumT
{
    //...
};
//--------------
template <typename LEFT, typename RIGHT> //(1)
SumT<LEFT,RIGHT> operator + (const ArgT<LEFT> &l, const ArgT<RIGHT> &r) //(2)
{
    //...
}

Все работает, только вот незадача — после обьявления сего темплейта любая нечаянная попытка применить сложение к типам, для которых этот оператор не определен, приводит к выводу сообщения о том, что компилятор не может разрешить аргументы шаблона operator +. Т.е. (посмотрите на строку (1) — template <typename LEFT, typename RIGHT>) любой шаг влево или вправо приведет к неожидаемой и неудачной попытке применения этого шаблона к неверным аргументам, например вот это:
struct Alpha{
    double alpha;
    double beta;
} a,a1,a2;
a = a1 + a2; //Нечаянно - для Alpha нет и никогда не будет перегруженной операции сложения

Мне это не нужно — я хочу, чтобы мой operator + применялся только к производным от ArgT (см. (2)), причем множество аргументов TYPE шаблона ArgT заранее неизвестно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.