foo()
一部の関数をに変更しようとしていますがoperator<<()
、単に「半分 C/半分 C++」コードを C++ のように見せるためです。ただし、次の変換ステップで行き詰まりました。
template <class... T>
inline const size_t foo(const T&... data) {
return sizeof...(T);
}
struct bar {
template <class... T>
inline const size_t operator<<(const T&... data) {
return sizeof...(T);
}
};
int main(int argc, char *argv[]) {
bar a;
std::cout << ">>> length " << foo(1, 2, 3) << std::endl;
std::cout << ">>> length " << (a << 1 << 2) << std::endl;
std::cout << ">>> length " << (a << 1 << 2 << 3) << std::endl;
std::cout << ">>> length " << (a << 1 << 2 << 3 << 4) << std::endl;
}
出力から:
$ ./a.out
>>> length 3
>>> length 4
>>> length 32
>>> length 512
最初の計算は に対して実行されa << 1
、それに応じて後続の値がシフトされると結論付けています。それでも、のユーザーにインターフェイスfoo()
を提供するために を書き直す方法がわかりません。もちろん、セマンティクスを変更することはありません。operator<<()
struct bar
foo()
class T...
パラメータとしてに渡す方法がない場合、関数は何度も呼び出されるため、operator<<()
当然、 よりも効率が悪くなります。foo()
これには妥当な C++ 構造がありますか、それとも固執することfoo()
が唯一の/最良のオプションですか?
コンテキスト:
これらのfoo()
機能は、ネットワーク通信の送信者/受信者です。通常の関数を使用する以外に、送信者/受信者ストリーム、書き込み可能/読み取り可能な使用<<
および演算子を備えた、より「C++」なインターフェイスを提供する方がよいと思いました。>>
foo(...)