Здравствуйте, <Аноним>, Вы писали:
А>кто что думает по этому поводу ?
Конструктор нельзя параметризовать явно. Однако можно сделать так:
template<class T> struct type2type {};
class Foo
{
public:
template<class T> explicit Foo(type2type<T> dummy) {.....}
// или такtemplate<class T> explicit Foo(T* dummy) {.....}
};
void f(Foo);
.....
Foo obj( (type2type<int>()) ); // обратите внимание на лишние скобки. Без них эта конструкция будет трактоваться как объявление функции.
Foo* ptr = new Foo(type2type<int>());
f(Foo(type2type<int>()));
// или так
Foo obj((int*)NULL);
Foo* ptr = new Foo((int*)NULL);
f(Foo((int*)NULL));
// а если убрать explicit, то, соответственно,
Foo obj = type2type<int>(); // здесь незримо присутствует ещё и конструктор копирования
f(type2type<int>());
// или
Foo obj = (int*)NULL;
f((int*)NULL);
КЛ>убери определения CFoo::CFoo и CFoo::init из cpp. КЛ>
КЛ>template <>
КЛ>class CFoo<2>
КЛ>{};
КЛ>
Еще вопросик : а если у меня в классе 20 методов — для специализированного класса нуно всех их переписывать (писать специализацию)? Если из этих 20 методов нужно в специализированном переписать только 1 метод — функциональность остальных удовлетворяет.
Не хочется дублировать методы .
Re[5]: конструктор шаблон
От:
Аноним
Дата:
18.07.06 10:36
Оценка:
КЛ>убери определения CFoo::CFoo и CFoo::init из cpp. КЛ>
КЛ>template <>
КЛ>class CFoo<2>
КЛ>{};
КЛ>
т.е. можна ли как -то провести специализацию отдельного метода а не всего класса ?
Здравствуйте, Аноним, Вы писали:
КЛ>>убери определения CFoo::CFoo и CFoo::init из cpp. КЛ>>
КЛ>>template <>
КЛ>>class CFoo<2>
КЛ>>{};
КЛ>>
А>Еще вопросик : а если у меня в классе 20 методов — для специализированного класса нуно всех их переписывать (писать специализацию)? Если из этих 20 методов нужно в специализированном переписать только 1 метод — функциональность остальных удовлетворяет.
А>Не хочется дублировать методы .
1) сдлай его шаблонным и уже его специализируй, только в с++ функции более чем 1 шаблонным параметром специализировать нельзя
2) сделай из этого метода policy-класс
Здравствуйте, <Аноним>, Вы писали:
А>Еще вопросик : а если у меня в классе 20 методов — для специализированного класса нуно всех их переписывать (писать специализацию)? Если из этих 20 методов нужно в специализированном переписать только 1 метод — функциональность остальных удовлетворяет. А>Не хочется дублировать методы .
Расскажи о твоей задаче более подробно. Наверняка есть решение, не обязательно с помощью специализации и т.п.
Здравствуйте, Константин Л., Вы писали:
КЛ>1) сдлай его шаблонным и уже его специализируй, только в с++ функции более чем 1 шаблонным параметром специализировать нельзя
Здравствуйте, Аноним, Вы писали:
А>Еще вопросик : а если у меня в классе 20 методов — для специализированного класса нуно всех их переписывать (писать специализацию)? Если из этих 20 методов нужно в специализированном переписать только 1 метод — функциональность остальных удовлетворяет. А>Не хочется дублировать методы .
То есть у тебя класс для различных функций будет отличаться только реализацией одного метода?
если так то я делал (тут на форуме создавал тему) так:
template<calss ItemClass, class BaseEnumClass>
class C1 : public BaseEnumClass
{
...
//отличия только в этих фукнциях шаблона в зависимости от класса
HRESULT CloneItem(ItemClass &dest, const ItemClass &source);
void DestroyItem(ItemClass item);
....
};
......
//реализация для конкретных классов вот такая template<>
HRESULT Enumeration<T1, Class1>::CloneItem(T1 &dest, const T1 &source)
{
.....
return S_OK;
}
template<>
void Enumeration<T1, Class1>::DestroyItem(T1 item)
{
...
}