przeładowanie operatora[]

0

Witam

class nowa{
public:
	void operator[](std::string);
	
};
void nowa::operator [](std::string str)
{

	std::cout<<str;

}

int main()
{
nowa obj;
obj.operator[]("aaa");  // tak by bylo nice:   obj["aaa"]

return 0;
}

dlaczego nie moge uzywac operatora [] tak jak to zaprezontowalem w komentarzu?

0

Możesz .
Może być tylko problem jeśli kompilator nie robi automatycznie
konwersji "cstring" -> std::string .
Wtedy będzie błąd .
Lepiej stosować to jawnie ( rzutowanie lub obiekt tymczasowy ).

obj.operator[](std::string("aaa"));
0

Albo dołożyć jeszcze jeden operator [] :

void nowa::operator [](cont char* str) { operator [](std::string(str)) };
0

Byloby dosc dobrze, gdyby operator [] cos zwracal ;) Bo wtedy korzystanie z niego jako operatora tablicowego ma sens :)

0
class Foo
{
public:
	void operator[](const std::string & s)
	{
		std::cout << s;
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	Foo f;
	f["cos"];
	std::cin.get();
	return 0;
}

Mi tam dziala normalnie.

0

misiaczek_ - szczerze mowiac, tez nie widze problemu.. powinno chodzic na jednej,nie przeladowanej funkcji bioracej string, chocby dlatego, ze string posiada konstruktor pobierajacy const char* i wykona sie konwersja niejawna.. napisz co za bledy kompilator wyrzuca jak probowales dac obj["napis"]

0

Panowie ;-P
Faktycznie dziala bez problemu :D
Widocznie wczesniej mialem to inaczej zaimplementowane dlatego nie dzialalo.
Takze sori za zamieszanie :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1