わかりました、それで、誰もがあなたにはできないという簡単な声明でここに着陸しました。誰も信じない。実際、できます。しかし、あなたがそれをやろうとしたわけではありません。通常、関数呼び出しのようなステートメントを他の関数の外に置くことはできません。そして、呼び出される最初の関数は常にmain
です。ただし、C++ にはRAIIとグローバル オブジェクトがあります。したがって、上記のルールには例外が 1 つだけあります。それは、グローバル オブジェクトの構築と破棄です。RAIIを採用し、一部のオブジェクトをグローバルに宣言することで、そのコンストラクターを呼び出して、残りをそこから行うことができます。たとえば、次のように問題を解決できます。
#include <sstream>
#include <iostream> // just for std::cout and std::endl.
std::stringstream h;
struct MyStruct {
MyStruct() {
h.str(""); //clearing the stringstream object
std::cout << "`h` string stream is cleared now!" << std::endl;
}
};
MyStruct mystruct;
int main()
{
std::cout << "I am called AFTER MyStruct's constructor" << std::endl;
}
コンパイルして実行します。
$ g++ -Wall -pedantic -std=c++98 ./test.cc && ./test
`h` string stream is cleared now!
I am called AFTER MyStruct's constructor
それが役に立てば幸い。幸運を!