omi*_*nns 1 c++ templates sfinae type-traits
为什么编译器可以使用以下代码推导出T:
#include <vector>
template<typename T>
void foo(T& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是这个代码失败了:
#include <vector>
#include <type_traits>
template<typename T>
void foo(typename std::enable_if<true, T>::type& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想使用第二个构造,在两个模板函数之间进行选择,基于传递的类方法存在.
在第二种情况下,您有一个非推导的上下文,换句话说,编译器无法推断出类型.
非演绎语境的最简单的例子是
template<typename T>
struct Id
{
using type = T;
};
template<typename T>
void foo(typename Id<T>::type arg); // T cannot be deduced
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |