| επιστημη さん、ありがとうございました。
"マジレスすれば"の部分が欲しいものでした。
分類の選択を見落としていました。すみません。分類はC/C++です。
sgiのSTLドキュメント(http://www.sgi.com/tech/stl/)を見ながら、
型宣言の書き方を練習していたのですが、二つ質問があります。
MinGWのg++を使っています。
一つ目の質問:
ポインタ変数を介してoperator()を呼び出すとき、->記法は使えないのでしょうか?
int main() {
equal_to<int>* p = new equal_to<int>();
p->(1, 2); // コンパイルエラー
(*p)(1, 2); // コンパイルできる
}
(*p)(1, 2)はコンパイルできますが、p->(1, 2)はコンパイルできません。
operator()を呼び出すとき、->記法は使えないのでしょうか?
二つ目の質問:
equal_to<int>(), less<int>()を配列に格納する場合の型宣言はどうなりますか?
int main() {
binary_function<int, int, bool>* ar[] = {
new equal_to<int>(),
new less<int>(),
};
}
上のコードはコンパイルできますが、
(*ar[0])(1, 2)
を加えるとコンパイルエラーとなります。
配列の型宣言が間違っているのか、それともoperator()の呼び出しが間違っているのか、
そもそもequal_to<int>(), less<int>()を一つの配列の格納できないのか、
どれだが分からないのですが、以下のようなコードを書きたいです。
int main() {
// ???の部分がわからない
??? ar[] = {
new equal_to<int>(),
new less<int>(),
};
???* p = ar[0];
(*p)(1, 2); // equal_to<int>()(1, 2)を呼び出す
???* p = ar[1];
(*p)(1, 2); // less<int>()(1, 2)を呼び出す
}
774RRさん、
> binder1st<equal_to<char>>eq(equal_to<char>(), 'p'); // のほうがいいんでないか?
わからなかったのですが、タイプ数が少なくなるからですか?
たとえば、以下の二つは同じ意味(コストも同じ)だと思っていたのですが…。
struct A {
A(int x) {}
};
int main() {
A a(10); // 下の行と同じ意味(コストも同じ)
A b = A(10); // 上の行と同じ意味(コストも同じ)
}
よろしくお願いいたします。
|