2012-09-12 138 views
2

有沒有一種方法可以在C++中擴展數據類型,就像在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()); 

這應該以某種方式打印。

+1

不在C++中。但是你可以做一些像'大寫(數據)'的東西。 – Mysticial

+1

如果所討論的數據類型是一個結構/類,你可以(但可能不應該)從它繼承。對於像'int'或'char'(或其數組)那樣的內置類型,你幾乎不走運。 –

+0

我不認爲這與原始類型有很大關係。但是對於類,您可以製作一些java樣式的東西,並讓所有這些東西用給定的方法toString(),大寫()ecc:/ 實現可以說'可打印'接口或者您可以創建一個模板或靜態函數傳遞價值。 – jalone

回答

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進行初始化。

0

不,JavaScript是基於對象的原型。這個概念不適用於C++。他們是不同的語言,我甚至不能向你展示你的問題的反例。

+0

大聲笑感謝您的幫助,我知道這將是具有挑戰性的。我想知道最接近這個解決方案的是什麼。我想用一個新班級。 –

2

在C++中沒有辦法做到這一點。在我看來,最接近這個的是創建一個類似內置類型的類,但會提供額外的功能。儘管如此,「代理」類型並不總是理想的,但它絕不可能像內置類型一樣工作。

+0

這是一個很好的答案,也許是最好的解決方案,但即時通訊的柵欄上給它一個標記,因爲我不想誤導別人,但你可能需要一個類SString(特殊字符串)或類似的東西,可以創造什麼 –