c++ - Why can't a specialized template function accept both a type and it's constant version? -
if t type, why can normal function accept both t , const t specialized template function cannot? mean programmer has type more code defeats purpose of using templates?
struct s { void func(const char *buf) { cout << "func(const char *)" << endl; } void func(const wchar_t *buf) { cout << "func(const wchar_t *)" << endl; } }; output: 2 different functions called t , const t when t char*/wchar_t*
func(const char *) func(const wchar_t *) func(const char *) func(const wchar_t *) the same templates:
struct ss { template<typename t> void func (t t) { cout << "func (t)" << endl; } template<> void func (const char *buf) { cout << "func (const char *)" << endl; } template<> void func(const wchar_t *buf) { cout << "func (const wchar_t *)" << endl; } }; output: 3 different functions called t , const t when t char*/wchar_t*
func (const char *) func (const wchar_t *) func (t) func (t)
to quote jarod42's comment:
with
char *,void func (t t)exact match (witht = char*) whereas has promoteconst char*calledvoid func (const char *buf).
the compiler prefers use exact match wherever possible.
Comments
Post a Comment