Мой (неработающий) код:
// hpp file
#include <iostream>
#include <string>
class iHello {
public: virtual void hello(void) = 0;
};
template<typename T> class foo : public iHello {
public: void hello(void) { std::cout << "Say hello :" << key << std::endl; }
private:
static const std::string key;
};
template<typename T> const std::string foo<T>::key = "all foo<T>";
// cpp file
class boo: public foo<boo> { };
class bar: public foo<bar> { };
template<typename T> const std::string foo<bar>::key = "bar"; // error
class baz: public foo<baz> { };
template<typename T> const std::string foo<baz>::key = "baz"; // error
int main(int argc, char ** argv) {
boo a;
bar b;
baz c;
a.hello();
b.hello();
c.hello();
return 0;
}
Мой желаемый результат будет:
Say hello :all foo<T>
Say hello :bar
Say hello :baz
Но я не могу понять, как инициализировать член статической константы key
основанный на шаблонном классе.
Если я не могу сделать оба (общий и конкретный случаи), то я предпочитаю, чтобы мне пришлось явно определять key
для каждого созданного шаблонного класса.
Есть ли способсделать это?