【发布时间】:2016-10-04 15:10:55
【问题描述】:
我有以下代码,它试图将二进制数(作为布尔值列表传递,最低有效位在前,可变长度)转换为十进制数:
#include <iostream>
using namespace std;
template<typename T>
int bin_to_dec(int multi, T first) {
cout<<"mutli"<<multi<<endl;
return first?multi:0;
}
template<typename T, typename... Args>
int bin_to_dec(int multi, T first, Args... args) {
cout<<"mutli"<<multi<<endl;
return (first?multi:0) + adder(multi*2, args...);
}
template<typename T, typename... Args>
int bin_to_dec(T first, Args... args) {
cout<<"mutli"<<1<<endl;
return (first?1:0) + adder(2, args...);
}
int main()
{
cout<<bin_to_dec(true, true, false, true)<<endl;
}
它工作得很好,但我想让它只适用于布尔值,所以当我尝试像 bin_to_dec(1,2,3) 这样的东西时,它不应该编译。我试图使用类似的东西
template<bool First, bool... Bools>
但我不知道如何更进一步。有什么想法吗?
【问题讨论】:
标签: c++ templates c++11 variadic-templates template-specialization