c++元编程
1 顺序代码
使用<type_traits>库,程序实现删除引用返回const。第7行删除引用,第8行添加const。程序无输出结果。
#include <iostream>
#include <type_traits>
template<typename T>
struct fun
{
using RemRef = typename std::remove_reference<T>::type;
using type = typename std::add_const<RemRef>::type;
};
int main()
{
fun<int&>::type x=3;
}
2 分支代码
两种方法编写分支代码
#include <iostream>
#include <type_traits>
constexpr int fun(int x)
{
if(x>3)
return x*2;
else
return x-100;
}
template<int x>
int fun()
{
if constexpr (x>3)
return x*2;
else
return x-100;
}
int main()
{
constexpr int x = fun(100);
int y = fun<100>();
}
3.1 循环代码
计算二进制1的个数
#include <iostream>
#include <type_traits>
using namespace std;
template <int x>
constexpr auto fun = (x%2) + fun<x/2>;
template <>
constexpr auto fun<0> = 0;
constexpr auto x = fun<99>;
int main()
{
cout<<x<<endl;
}
3.2 输出结果
4