在模板功能中打印任何结构
print any struct in template function
我有3个或更多结构,我希望我有一个功能以打印任何struct
例如:
struct A
{
int a0;
string a1;
bool a2;
}
和
struct B
{
CString b0;
double b1;
int b2;
string b3
}
我想用相同功能打印此结构(a和b(
这样:
template<typename T>
inline void print(T)
{
std::cout << // I don't know what is write here....
}
有任何身体帮助我?
C 中通常的练习是为您的类型定义operator<<(std::ostream &, const T &)
:
std::ostream &operator<<(std::ostream &os, const A &value)
{
// print here
return os;
}
应该针对要打印的每种类型进行此功能,并且该功能应与该类型相同的名称空间定义。
之后,您的数据类型可以打印到所有输出流。这也允许boost::lexical_cast
之类的东西与您的类型一起使用,因为它在内部将值打印到std::stringstream
。
另外,另一个解决方案是制作一个称为 to_string
的函数(这是直接将您的struct转换为字符串,但性能不好(
struct A
{
int a0;
string a1;
bool a2;
string to_string() const {
return "{ " + std::to_string(a0) + ", " + a1 + ", " + (a2 ? "true" : "false") + " }";
}
};
然后
template<typename T>
void print(const T &a) {
cout << a.to_string() << "n";
}
这对打印,打印不利,使用实施operator<<
但是。
当子类想要更改输出格式时,这具有不利地位。它不能。
so
class DynamicallyToStringConvertible {
public:
virtual string to_string() const = 0;
virtual ~DynamicallyToStringConvertible() {}
};
struct A: DynamicallyToStringConvertible
{
...
virtual string to_string() const {
return "{ " + std::to_string(a0) + ", " + a1 + ", " + (a2 ? "true" : "false") + " }";
}
}
struct SubclassFromA: public A {
virtual string to_string() const {
return "Subclass: " + A::to_string();
}
};
函数 print
是
然后
void tryPrintingAsA(const A &a) {
print(a);
}
您现在(在虚拟函数之后(会发现,这将适用于subclassa。但是,如果您尝试了operator<<
或解决方案的开头(无虚拟的TO_STRING(,它将适用于SubClassa,因为它是香草a。
那么您将做类似的东西
friend ostream &operator<<(ostream &s, const DynamicallyToStringConvertible &p) {
return s << p.to_string();
}
在您的基类内部,
class DynamicallyToStringConvertible {
public:
virtual string to_string() const = 0;
virtual ~DynamicallyToStringConvertible() {}
friend ostream &operator<<(ostream &s, const DynamicallyToStringConvertible &p) {
return s << p.to_string();
}
};
现在尝试A打印函数以:
void tryPrintingAsA(const A &a) {
cout << a;
}
相关文章:
- 打印时有二叉树问题.用户输入不打印任何内容
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- cout 不打印任何内容到控制台
- 为什么字符串没有更新并且最终没有打印任何内容
- 我如何处理 TMP 以避免打印任何东西
- 泛型函数反向打印任何矢量,编译器出错
- Cout 一个字符串可以打印任何内容到屏幕上
- "cout<<count<<endl;"没有打印任何内容
- 为什么循环迭代不打印任何东西?
- 函数不打印任何 c++
- 下面的代码没有打印任何东西
- 我的 c++ 程序中的字符数组不会打印任何内容
- 如果否则错误:如何使其打印任何数字
- 在 C++ 中声明向量后无法打印任何内容
- 在模板功能中打印任何结构
- 如果找不到解决方案,我如何留下递归循环,而不会打印任何东西
- 我的程序不会打印任何内容...
- 我的 c++ 程序不打印任何字符,但是如果我将它们更改为 int,代码可以完美运行
- 尝试使用类,但未打印任何内容.不会生成任何错误.我错过了什么吗?
- 为什么 void 函数不打印任何C++内容?