Xét đoạn mã sau:Buộc một tình trạng quá tải cụ thể khi mẫu template
#include <iostream>
#include <vector>
#include <type_traits>
// Version A
template<typename T>
void f(const T& x)
{
std::cout<<"Version A"<<std::endl;
}
// Version B
template<template<typename> class T, typename T1>
void f(const T<T1>& x)
{
std::cout<<"Version B"<<std::endl;
}
// Main
int main(int argc, char* argv[])
{
f(double());
f(std::vector<double>()); // <- How to force the use of version B ?
return 0;
}
Theo mặc định, nó sẽ tạo ra:
Version A
Version A
Làm thế nào để buộc việc sử dụng Version B
khi loại thông qua là một mẫu mẫu với hình dạng tốt (tôi có thể thêm phiên bản mới của f
, tôi có thể thêm std::enable_if
hoặc cú pháp đặc điểm loại C++ 11 khác, nhưng nếu có thể tôi muốn tránh thêm lớp trợ giúp)?