шаблоны
От: mighty  
Дата: 17.03.04 22:18
Оценка:
Привет всем!
Помоги те пожалуйста разобраться — пишу проект на на VC++ (VS 7.1) нужно обратиться к реестру, у меня есть шаблон класса такой..
template <HKEY Root> class mRegistry (в отдельном файле Registry.h, в нем же и реализация)
{public:..
bool Set(const char *name, DWORD val)
{..}
DWORD Get(const char *name, DWORD def = 0)
{..}
mRegistry(const char *key) : Key(key) {}; — это как я понял конструктор
}
Мне нужно воспользоватья этим шаблоном в своей проге что я должен для этого сделать? Я добавил в launcherDlg.h ссылку(include) на mRegistry.h

как только я начинаю объявлять mRegistry<HKEY_LOCAL_MACHINE> Config (в какой-то функции, например событие OnClick) по кнопке в диалоге, чтобы считать данные среестра — получаю ошибку:
e:\myprojects\launcherDlg.cpp(169): error C2512: 'mRegistry<Root>' : no appropriate default constructor available
with
[
Root=0x80000002
]
????? Где я чего не сделал???? Помоите вот уже который день бьюсь ;(((
Re: шаблоны
От: folk Россия  
Дата: 17.03.04 23:18
Оценка:
Здравствуйте, mighty, Вы писали:

[]

Вот так объявлен конструктор:

M>mRegistry(const char *key) : Key(key) {}; — это как я понял конструктор


А вот так ты его вызываешь:

M>как только я начинаю объявлять mRegistry<HKEY_LOCAL_MACHINE> Config


Видишь ошибку?

А вообще не стоит делать класс Registry шаблонным, и обозвать его лучше RegistryKey.

Кстати если используешь MFC или ATL/WTL, то там есть классы/функции для работы с рееестром.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re: шаблоны
От: Vamp Россия  
Дата: 18.03.04 06:51
Оценка:
1. Конструктор надо вызывать со строковым параметром — именем ключа. То есть как-нибудь так:

mRegistry<HKEY_LOCAL_MACHINE> Config("Applications");


2. Из того что видно, класс представляется довольно опасным. Я о

mRegistry(const char *key) : Key(key) {};
Да здравствует мыло душистое и веревка пушистая.
Re[2]: шаблоны
От: Bell Россия  
Дата: 18.03.04 07:05
Оценка:
Здравствуйте, Vamp, Вы писали:

V>2. Из того что видно, класс представляется довольно опасным. Я о


V>
V>mRegistry(const char *key) : Key(key) {};
V>


Это сильно зависит от типа члена Key. Может это std::string ?
Любите книгу — источник знаний (с) М.Горький
Re[3]: шаблоны
От: Vamp Россия  
Дата: 18.03.04 07:07
Оценка:
B>Это сильно зависит от типа члена Key. Может это std::string ?
Безусловно. Но тогда с большой долей вероятности конструктор бы и принимал константую ссылку на std::string.
Впрочем, конечно, все эт домыслы.
Да здравствует мыло душистое и веревка пушистая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.