2

有没有办法在 C++ 中扩展数据类型,就像在 JavaScript 中一样?

我想这有点像这样:

char data[]="hello there";
char& capitalize(char&)
{
    //Capitalize the first letter. I know that there
    //is another way such as a for loop and subtract
    //whatever to change the keycode but I specifically 
    //don't want to do it that way. I want there
    //to be a method like appearance.
}

printf("%s", data.capitalize());

这应该以某种方式打印。

4

3 回答 3

2

在 C++ 中没有办法做到这一点。在我看来,最接近这一点的是创建一个行为类似于内置类型但会提供额外功能的类。永远不可能让它们像内置类型一样 100% 工作,但“代理”类型并不总是理想的。

于 2012-09-12T23:54:02.170 回答
1

您可以获得的最接近的是使用运算符重载,例如

#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>

std::string operator!(const std::string& in) {
  std::string out = in;
  std::transform(out.begin(), out.end(), out.begin(), (int (*)(int)) std::toupper);
  return out;
}

int main() {
  std::string str = "hello";
  std::cout << !str << std::endl;
  return 0;
}

替代方法包括创建一个具有operator std::string重载的类和一个构造函数以使用std::string.

于 2012-09-12T23:56:49.217 回答
0

不,JavaScript基于对象的原型。这个概念不适用于C++。它们是如此不同的语言,我什至无法为您的问题举一个反例。

于 2012-09-12T23:48:07.893 回答