c++ - 传递模板对象
问题描述
我有一个模板类:
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>
了
有解决方案吗?
解决方案
我还发现以下代码运行良好:
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)
{ }
};
推荐阅读
- excel - 水晶报表显示线与图像中预期的一样
- reactjs - 如何实现rtk的createApi查询去抖动
- python - 如何根据函数 python 的输出编写递归函数
- javascript - 对带有 match() 和 test() 方法 Regex 的无限 while 循环感到困惑
- python - 使用 django 将 html 与 mysql 数据库绑定时出错
- python - 无法使用 python 将数据附加到 AWS S3 中的现有 csv 文件
- firebase - 指定自动生成的 Firestore 文档 ID 的格式
- c++ - 是否可以检查字符串迭代器是否等于没有原始字符串的结束迭代器?
- asp.net - 如何访问 Azure Functions 中的 .NET Framework 默认 SMTP 服务?在 Azure 函数中使用邮政
- python - Python 变量如何引用类实例和对象?