"効果的なC++"の項目44: テンプレートのうち、パラメータに依存しない要因コード。Hou Jie(侯捷)によって翻訳された英語版と中国語版との間にいくつかの違いがあります。派生クラスで基本テンプレートクラス関数を表示するにはどうすればよいですか?
これは私がページ214で見つかった英語版である:コードの【選択前の行は、第二の最後の行を除いてほぼ同じで侯杰(侯捷)によって翻訳されたその中国語版では
template<typename T> // size-independent base class for
class SquareMatrixBase { // square matrices
protected:
...
void invert(std::size_t matrixSize); // invert matrix of the given size
...
};
template<typename T, std::size_t n>
class SquareMatrix: private SquareMatrixBase<T> {
private:
using SquareMatrixBase<T>::invert; // make base class version of invert
// visible in this class; see Items 33
// and 43
public:
...
void invert() { invert(n); } // make inline call to base class
}; // version of invert
コード:中国語版で
void invert() { this->invert(n); }
は、ホウ傑はthis->invert(n)
の代わりinvert(n)
を使用する理由を説明する:テンプレート化基底クラスの関数名は、派生クラスで非表示になります。
using SquareMatrixBase<T>::invert;
が派生クラスの他の部分に追加されているので、これは間違っていると思います。
しかし、私は有名な翻訳家として、侯傑はこのような明白な間違いを簡単にはしません。今回は本当に間違っていますか?
'SquareMatrixBase :: invert;や' this-> invert(n) 'を使うことができます。しかし、両方を使う必要はないと思います。 –
私はそれが異なった議論をするのに十分だったと思いましたか? –
あなたは確かですか?Meyersの「Effective C++」の項目43では、テンプレートベースのクラスで関数を使用する3つの方法を提供しています。そのうちの1人が 'this'を使用しています。 –