конструктор шаблон
От: Аноним  
Дата: 18.07.06 09:55
Оценка:
кто что думает по этому поводу ?

[ccode]
class CFoo
{
public:
template<class TYPE>
CFoo(void)
{
};

virtual ~CFoo(void){};
};

[/code]
Re: конструктор шаблон
От: Аноним  
Дата: 18.07.06 09:58
Оценка:
кто что думает по этому поводу ?

class CFoo
{
public:
    template<class TYPE>
    CFoo(void)
        {
        };

    virtual ~CFoo(void){};
};
Re[2]: конструктор шаблон
От: shank  
Дата: 18.07.06 10:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>кто что думает по этому поводу ?


А>
А>class CFoo
А>{
А>public:
А>    template<class TYPE>
А>    CFoo(void)
А>        {
А>        };

А>    virtual ~CFoo(void){};
А>};

А>

Непонятно как параметр шаблона конструктора должен задаваться/выводиться.
Re[2]: конструктор шаблон
От: Какая разница Украина  
Дата: 18.07.06 10:06
Оценка: :)))
Здравствуйте, Аноним, Вы писали:

А>кто что думает по этому поводу ?


А>
А>class CFoo
А>{
А>public:
А>    template<class TYPE>
А>    CFoo(void)
А>        {
А>        };

А>    virtual ~CFoo(void){}; 
А>};

А>

Думаю что здесь синтаксический оверхед
Лишних две точки с запятой
!0xDEAD
Re[2]: конструктор шаблон
От: Кодт Россия  
Дата: 18.07.06 10:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>кто что думает по этому поводу ?


Конструктор нельзя параметризовать явно. Однако можно сделать так:
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);
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Re[3]: конструктор шаблон
От: Аноним  
Дата: 18.07.06 10:18
Оценка:
а вот если есть такая штука

//В *.h файле

template<int val>
class CFoo
{
public:
    CFoo(void);
    void init();
};

//В *.cpp файле
template<int val>
CFoo<val>::CFoo(void)
{
}

template<int val>
void CFoo<val>::init()
{
    cout<<0<<endl;
}

//Как перегрузить для val == 2 ???
//пробую так - ошибка 
template<int val>
void CFoo<2>::init()
{

}
Re[4]: конструктор шаблон
От: Константин Л. Франция  
Дата: 18.07.06 10:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а вот если есть такая штука


А>
А>//В *.h файле

А>template<int val>
А>class CFoo
А>{
А>public:
А>    CFoo(void);
А>    void init();
А>};

А>//В *.cpp файле
А>template<int val>
А>CFoo<val>::CFoo(void)
А>{
А>}

А>template<int val>
А>void CFoo<val>::init()
А>{
А>    cout<<0<<endl;
А>}

А>//Как перегрузить для val == 2 ???
А>//пробую так - ошибка 
А>template<int val>
А>void CFoo<2>::init()
А>{

А>}
А>


убери определения CFoo::CFoo и CFoo::init из cpp.



template <>
class CFoo<2>
{};
Re[5]: конструктор шаблон
От: Аноним  
Дата: 18.07.06 10:33
Оценка:
КЛ>убери определения 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>
КЛ>{};

КЛ>


т.е. можна ли как -то провести специализацию отдельного метода а не всего класса ?
Re[6]: конструктор шаблон
От: Константин Л. Франция  
Дата: 18.07.06 10:52
Оценка:
Здравствуйте, Аноним, Вы писали:

КЛ>>убери определения CFoo::CFoo и CFoo::init из cpp.

КЛ>>
КЛ>>template <>
КЛ>>class CFoo<2>
КЛ>>{};
КЛ>>

А>Еще вопросик : а если у меня в классе 20 методов — для специализированного класса нуно всех их переписывать (писать специализацию)? Если из этих 20 методов нужно в специализированном переписать только 1 метод — функциональность остальных удовлетворяет.

А>Не хочется дублировать методы .


1) сдлай его шаблонным и уже его специализируй, только в с++ функции более чем 1 шаблонным параметром специализировать нельзя
2) сделай из этого метода policy-класс
Re[6]: конструктор шаблон
От: Кодт Россия  
Дата: 18.07.06 11:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Еще вопросик : а если у меня в классе 20 методов — для специализированного класса нуно всех их переписывать (писать специализацию)? Если из этих 20 методов нужно в специализированном переписать только 1 метод — функциональность остальных удовлетворяет.

А>Не хочется дублировать методы .

Расскажи о твоей задаче более подробно. Наверняка есть решение, не обязательно с помощью специализации и т.п.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Re[7]: конструктор шаблон
От: shank  
Дата: 18.07.06 11:28
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>1) сдлай его шаблонным и уже его специализируй, только в с++ функции более чем 1 шаблонным параметром специализировать нельзя


Почему нельзя? Вот так вроде работает.
#include <iostream>

template<class T, class U>
struct A
{
    void fn()
    {
        std::cout << "primary\n";
    }
};

template<>
void A<short, float>::fn()
{
    std::cout << "specialization\n";
}

int main()
{
    A<int, float> a;
    A<short, float> b;
    a.fn(); // primary
    b.fn(); // specialization
}

Или я не так Вас понял?
Re[8]: конструктор шаблон
От: Константин Л. Франция  
Дата: 18.07.06 12:10
Оценка:
Здравствуйте, shank, Вы писали:

Не так

имелось ввиду:


class A
{
public:

  template <typename T, typename U>
  void f();
};

template <typename T>
void A::f<T, int>(){}
Re[9]: конструктор шаблон
От: shank  
Дата: 18.07.06 12:16
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Не так


КЛ>имелось ввиду:


КЛ>

КЛ>class A
КЛ>{
КЛ>public:

КЛ>  template <typename T, typename U>
КЛ>  void f();
КЛ>};

КЛ>template <typename T>
КЛ>void A::f<T, int>(){}

КЛ>


Ааа, ну здесь дело в частичной специализации...
Re[10]: конструктор шаблон
От: Константин Л. Франция  
Дата: 18.07.06 12:42
Оценка:
Здравствуйте, shank, Вы писали:

S>Здравствуйте, Константин Л., Вы писали:


КЛ>>Не так


КЛ>>имелось ввиду:


КЛ>>

КЛ>>class A
КЛ>>{
КЛ>>public:

КЛ>>  template <typename T, typename U>
КЛ>>  void f();
КЛ>>};

КЛ>>template <typename T>
КЛ>>void A::f<T, int>(){}

КЛ>>


S>Ааа, ну здесь дело в частичной специализации...


типа
Re[6]: конструктор шаблон
От: Testus  
Дата: 18.07.06 12:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Еще вопросик : а если у меня в классе 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)
{
...
}


или я не правильно понял сути твоей проблемы?
Glück auf
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.