我有一個模板功能,只要做一些事情與給定值作爲模板類型是一個數字:模板函數重載(通用型VS模板模板類型)選擇正確的過載
template <typename scalar_t>
void function(scalar_t value)
{
if constexpr (std::is_floating_point_v<scalar_t>)
{
std::cout << value << 'F';
}
if constexpr (std::is_integral_v<scalar_t>)
{
std::cout << value;
}
}
和過載的這個模板期待一個容器容納人數:
template <typename scalar_t, template <typename> class container_t>
void function(const container_t<scalar_t> &container)
{
for (const auto &value : container)
{
function(value);
std::cout << ' ';
}
}
通過上面的模板,我叫下面的代碼:
int main()
{
function('0');
function(short{1});
function(2);
function(3l);
function(4ll);
function(5.f);
function(6.);
std::vector<int> v{7, 8, 9, 10};
std::list<double> l{11., 12., 13., 14.};
function(v);
function(l);
return 0;
}
其中給出以下輸出:
F6F
雖然我期待以下輸出:
F6F7 8 9 10 11F 12F 13F 14F
這意味着第一模板版本(function(scalar_t value)
)已被選擇,而不是所述第二版本( function(const container_t<scalar_t> &container)
)。
如何強制爲模板模板參數選擇第二版模板函數?
不知道如果多數民衆贊成的問題,但兩者'VECTOR'和'list'不要有一個,而是兩個模板參數 – user463035818
@ tobi303 [那真是個問題](https://wandbox.org/permlink/kvKHSpDJ6VEOWhRO)如果你能解釋爲什麼在答案中我可以upvote :) –