我想使用“ String.prototype”为javascript中的数据类型创建函数。在C ++中也可以吗?
例如:
int functionName()
{
if(this.string == "something") {
return 1;
}
return 0;
}
std::string mystring = "text";
int result = mystring.functionName();
答案 0 :(得分:3)
不,不是。
您可以从类继承并将新成员添加到新的派生类,但也可以考虑使用组成,因为继承并不总是合适的。有关这方面的更多信息,请查阅本书中有关面向对象编程的章节。
如果不需要访问私有数据,还可以考虑使用免费(非成员)功能。同样,请注意overdoing it with the getters/setters!
答案 1 :(得分:1)
您可以通过滥用独立的运算符重载来模拟C ++中的扩展功能。在这里,我利用了operator->*
。
#include <functional>
#include <iostream>
#include <string>
// Extension function.
static int functionName(std::string const& self) {
if (self == "something") {
return 1;
}
return 0;
}
// Thunk glue.
static int operator->*(std::string const& s, int(*fn)(std::string const&)) {
return fn(s);
}
int main() {
std::string s = "something";
int i = s->*functionName;
std::cout << i << "\n";
}
但是我强烈建议您等到将来的某些C ++标准正式采用统一函数调用。
编者注:不建议使用,因为它不是C ++惯用的语言,滥用运算符重载是使您不受欢迎的好方法。 C ++本身已经是一种足够困难的语言。