首页 > 解决方案 > 传递模板对象

问题描述

我有一个模板类:

template <typename T>
struct FilesName{
  const T filename_A;
  const T filename_B;
  FilesName(const T& _filename_A, const T& _filename_B): 
  filename_A(_filename_A),
  filename_B(_filename_B)
  { }
};

类型T可以是std::string, 或std::wstring, 或 otrers 字符串容器。

我想将它传递给构造函数新结构,

T用户定义。

struct Files{
  std::ofstream file_A;
  std::ofstream file_B;
  Files(const FilesName& _FilesName) :
    file_A(_FilesName.filename_A),
    file_B(_FilesName.filename_B)
  { }
};

我希望用户调用上面的代码:

struct FilesName<std::string> fn{"fa_name","fb_name"};
struct Files f(fn);

但是编译器告诉我

argument list for class template "Files" is missing

我修改为以下可以通过编译

template <typename T>
struct Files{
  std::ofstream file_A;
  std::ofstream file_B;
  Files(const FilesName& _FilesName) :
    file_A(_FilesName<T>.filename_A),
    file_B(_FilesName<T>.filename_B)
  { }
};

但用户调用代码将是

struct FilesName<std::string> fn{"fa_name","fb_name"};
struct Files<std::string> f(fn); # Here must add <std::string> 

这不是我想要的,

因为模板类型FilesName应该在传入Files. 我想我不需要再打字<std::string>

有解决方案吗?

标签: c++

解决方案


我还发现以下代码运行良好:

struct Files{
  std::ofstream file_A;
  std::ofstream file_B;
  template <typename T>
  Files(const FilesName<T>& _FilesName) :
    file_A(_FilesName<T>.filename_A),
    file_B(_FilesName<T>.filename_B)
  { }
};

推荐阅读