当在Python中定义__str__时,如何将C 的标准全局函数覆盖
How to override standard global function in c++ when called on a class just like in defining __str__ in python
主要问题:
在Python中,我们可以在类中定义诸如__unicode__
或__str__
之类的内容,这样,当我们在类上调用print()
或str()
(即str(myclass)
)时,我们会得到一个自定义且可读的字符串表示形式。在C 中,该课程如何完成?当我们调用string(myclass)
时,我们会得到myclass
的字符串表示?
背景故事:
这可能被标记为一个低质量的问题,因为我对C 非常新。
我目前正在通过练习中的C 练习进行工作,其中重点是编写代码以使提供的测试用例通过。我已经完成了39个可用练习中的30个,但是我目前已陷入此特定的测试案例代码上:
const auto actual = string(date_independent::clock::at(t.hour, t.minute));
在上一个练习中,我理解这是"创建一个名为 date_independent
的命名空间,在其中有一个名称clock
的类,并使该类具有名为at
的公共函数,它将接受两个参数(在这种情况下2整数小时和分钟)"。我使该函数成为static
函数,因为测试代码并未真正实例化时钟对象。我还将返回值为std::string
类型。在最初的几个测试用例中,它运行良好。不幸的是,我遇到了此测试代码:
const auto actual = string(date_independent::clock::at(a.hour, a.minute).plus(a.add));
在这种情况下,我以前返回字符串适得其反的解决方案,因为现在我需要在at()
的返回值上调用plus()
函数。这显然无法完成,因为at()
返回std::string
,并且字符串没有成员功能。然后,我注意到有一个string()
函数(?)封装了整个date_independent::clock::at(a.hour, a.minute).plus(a.add)
。但是,我不确定此string()
功能来自哪里,以及如何找到答案。对于Python,我认为这是某种类型铸造到字符串中,或其他一些名为String的函数。但是,这是C ,我还没有遇到这样的打字,所以也许不是。我的另一个想法是,与Python类似,也许类可以覆盖标准全局功能如何与之合作。就像在Python类中定义__unicode__
或__str__
何时可以返回自定义值。
因此,我的问题再次是,我的假设是该string
函数应该是一个成员函数,该函数应被覆盖正确吗?如果是这样,如何在C 中完成?我很感谢任何回答。我可以肯定的是,我没有看到一些基本的东西,因为我是该语言的新手。
下面找到测试代码的某些上下文。
...
BOOST_AUTO_TEST_CASE(time_tests)
{
for (timeTest t : timeCases) {
const auto actual = string(date_independent::clock::at(t.hour, t.minute));
BOOST_REQUIRE_MESSAGE(t.expected == actual, errorMsg(t.expected, actual, t.msg));
}
}
...
BOOST_AUTO_TEST_CASE(add_tests)
{
for (addTest a : addCases) {
const auto actual = string(date_independent::clock::at(a.hour, a.minute).plus(a.add));
BOOST_REQUIRE_MESSAGE(a.expected == actual, errorMsg(a.expected, actual, a.msg));
}
}
...
如果要在控制台中输出类或将其写入文件,则必须覆盖类的<<
操作员。
std::ostream& operator<<(std::ostream& os, const person& person)
{
return os << person.first_name << " " << person.last_name;
}
如果您只想要std::string
,只需添加一个返回类的字符串reententation的to_string
方法。
class person
{
public:
std::string to_string() const
{
return first_name + " " + last_name;
}
private:
std::string first_name;
std::string last_name;
};
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 如何使用模板化标准::函数作为参数?
- 是否有任何 C 标准函数将值"1"传递给所有 (%s)
- 可变参数模板和标准::函数
- 是否有一个标准函数可以打印/监视stdin文件的内容,同时将数据留在stdin中
- 我怎样才能把这个标准::函数传递给标准::异步
- 如何使用标准::函数使用可变参数模板
- "AfxIsValidAddress"函数的等效标准函数是什么?
- 使用多个参数将成员功能指针转换为标准C函数
- C++:将标准::函数转换为gsl_function
- 标准::函数的 typename 关键字
- 将成员函数作为标准函数回调
- C++在全局命名空间中找不到非标准 C 函数
- 标准函数的函数指针和成员函数指针的规则是什么
- 如何使用数组创建标准::函数
- 如何在 Visual Studio 中测试时重写标准C++函数
- 在C++中使用标准 C 函数时,是否需要"std::"前缀?
- 链接器如何查找标准函数和WinAPI函数
- 标准::函数复制参数
- 互斥与标准函数调用