C++类型 重载仅部分起作用
C++ Type Overloading only partly functional?
我目前正在尝试创建一个通用字符串流类,例如,我可以将其用作函数中的参数,无需太多工作即可连接值。
我现在似乎面临着一个奇怪的怪异。
主.cpp:
#include <iostream>
#include "ExStream.h"
using namespace std;
void func1(string);
int main(int argc, char** argv) {
ExStream ex;
ex << "Hey";
func1(ex);
system("pause");
return 0;
}
void func1(string s) {
cout << "func1 " << s << endl;
}
ExStream.h
#ifndef EXSTREAM_H
#define EXSTREAM_H
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class ExStream {
private:
string val;
string toString(int);
string toString(char);
string toString(char*);
string toString(const char*);
public:
ExStream();
friend ExStream& operator+(ExStream&, ExStream);
friend ExStream& operator+(ExStream&, int);
friend ExStream& operator+(ExStream&, char);
friend ExStream& operator+(ExStream&, char*);
friend ExStream& operator+(ExStream&, const char*);
friend ExStream& operator+(ExStream&, string);
friend ExStream& operator<<(ExStream&, ExStream);
friend ExStream& operator<<(ExStream&, int);
friend ExStream& operator<<(ExStream&, char);
friend ExStream& operator<<(ExStream&, char*);
friend ExStream& operator<<(ExStream&, const char*);
friend ExStream& operator<<(ExStream&, string);
operator char*();
operator const char*();
operator string();
void out();
};
#endif
ExStream.cpp
#include "ExStream.h"
ExStream::ExStream() {
}
ExStream& operator+(ExStream& ex1, ExStream ex2) {
ex1.val.append(ex2.val);
return ex1;
}
ExStream& operator+(ExStream& ex, int i) {
ex << ex.toString(i);
return ex;
}
ExStream& operator+(ExStream& ex, char c) {
ex << ex.toString(c);
return ex;
}
ExStream& operator+(ExStream& ex, char* s) {
ex << ex.toString(s);
return ex;
}
ExStream& operator+(ExStream& ex, const char* s) {
ex << ex.toString(s);
return ex;
}
ExStream& operator+(ExStream& ex, string s) {
ex.val.append(s);
return ex;
}
ExStream& operator<<(ExStream& ex1, ExStream ex2) {
ex1.val.append(ex2.val);
return ex1;
}
ExStream& operator<<(ExStream& ex, int i) {
ex << ex.toString(i);
return ex;
}
ExStream& operator<<(ExStream& ex, char c) {
ex << ex.toString(c);
return ex;
}
ExStream& operator<<(ExStream& ex, char* s) {
ex << ex.toString(s);
return ex;
}
ExStream& operator<<(ExStream& ex, const char* s) {
ex << ex.toString(s);
return ex;
}
ExStream& operator<<(ExStream& ex, string s) {
ex.val.append(s);
return ex;
}
ExStream::operator char*() {
return const_cast<char*>(val.c_str());
}
ExStream::operator const char*() {
return val.c_str();
}
ExStream::operator string() {
return val;
}
string ExStream::toString(int i) {
stringstream ss;
ss << i;
return ss.str();
}
string ExStream::toString(char c) {
stringstream ss;
ss << c;
return ss.str();
}
string ExStream::toString(char* s) {
return string(s);
}
string ExStream::toString(const char* s) {
return string(s);
}
void ExStream::out() {
cout << "VAL: " << val << endl;
}
根据我的理解,这两个函数调用应该是完全相同的,但这个例子显示了相反的情况。
关于如何解决此问题的任何想法?
我使用 Visual Studio 2013 for Windows 8.1 x64。
我不知道你为什么要重新发明轮子,已经有附加方法可以做你试图做的同样的事情。 不要忘记字符串不是基元类型,C++它是一个对象。
对于您的问题,似乎强制转换(字符串)ex导致运行时错误。 也许你应该看看这个关于C++投射的 http://www.cplusplus.com/doc/tutorial/typecasting/。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- ADL 在 constexpr 函数中不起作用(仅限 clang)
- SDL 输入仅在有时起作用
- 如果ConstexPR似乎仅在两种情况有效时起作用
- 输入字母f或任何字母,并像ABC ABCD ABCDE ABCDEF一样cout字母模式,但仅在我按0时起作用
- FindThreads 仅在启用 C 或 CXX 语言时起作用
- 为什么返回指向对象的指针仅在某个时候起作用?
- DLL注入仅在没有从视觉工作室开始时起作用
- 如果重载函数仅被部分重写,则多态性不起作用
- 使用openCV从网络摄像头捕获图像的函数仅在第一次调用时起作用
- fopen_s(&fp, "FileName.txt" ,w+);当我给出文件的相对路径时不起作用,并且仅在给出绝对路径时才有效
- C++类型 重载仅部分起作用
- 仅标头库内联不起作用