开发者

Template type deduction in C++ for Class vs Function?

开发者 https://www.devze.com 2022-12-14 11:43 出处:网络
Why is that automatic ty开发者_运维技巧pe deduction is possible only for functions and not for Classes?In specific cases you could always do like std::make_pair:

Why is that automatic ty开发者_运维技巧pe deduction is possible only for functions and not for Classes?


In specific cases you could always do like std::make_pair:

template<class T>
make_foo(T val) {
    return foo<T>(val);
}

EDIT: I just found the following in "The C++ Programming Language, Third Edition", page 335. Bjarne says:

Note that class template arguments are never deduced. The reason is that the flexibility provided by several constructors for a class would make such deduction impossible in many cases and obscure in many more.

This is of course very subjective. There's been some discussion about this in comp.std.c++ and the consensus seems to be that there's no reason why it couldn't be supported. Whether it would be a good idea or not is another question...


At Kona meeting Template parameter deduction for constructors (P0091R0) has been approved, which means that in C++17 we'll be able to we can write:

pair p1{"foo"s, 12};
auto p2 = pair{"foo"s, 12};
f(pair{"foo"s, 12});


In case of a function call, the compiler deduces the template type from the argument type. For example the std::max-function. The compiler uses the type of the arguments to deduce the template parameter. This does not allways work, as not all calls are unambigous.

int a = 5;
float b = 10;

double result1 = std::min( a, b ); // error: template parameter ambigous
double result2 = std::min< double >( a, b ); // explicit parameter enforces use of conversion

In case of a template class, that may not allways be possible. Take for instance this class:

template< class T>
class Foo {
public:
    Foo();
    void Bar( int a );
private:
    T m_Member;
};

The type T never appears in any function call, so the compiler has no hint at all, what type should be used.


I think implicit type conversion is only applicable to function arguments only so compiler can deduce it to make the function call success.

But how can it deduce what type you wanna have it class.

We have to wait 4 such a day when we have AI based compiler to do read our minds.

0

精彩评论

暂无评论...
验证码 换一张
取 消