2

JavaScript でできるように、C++ でデータ型を拡張する方法はありますか?

これは次のようなものだと思います。

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 に答える