How do I inherit from a virtual template class, in this code:
// test.h
class Base {
 public:
  virtual std::string Foo() = 0;
  virtual std::string Bar() = 0;
};
template <typename T>
class Derived : public Base {
 public:
  Derived(const T& data) : data_(data) { }
  virtual std::string Foo();
  virtual std::string Bar();
  T data() {
    return data_;
  }
 private:
  T data_;
};
typedef Derived<std::string> DStr;
typedef Derived<int> DInt;
// test.cpp
template<typename T>
std::string Derived<T>::Foo() { ... }
template<typename T>
std::string Derived<T>::Bar() { ... }
When I try to use the DStr or DInt, the linker complain that there are unresolved externals, which are Derived<std::string>::Foo() and Derived<std::string>::Bar(), and the same for Derived<int>.
Did I miss something in my code?
EDIT: Thanks all. It's pretty clear now.