如何专门使用variadic类模板
How to specialize with a variadic class template
以下示例代码说明了我的问题:
#include <array>
#include <vector>
#include <iostream>
#include <type_traits>
namespace Vector
{
namespace Intern
{
template <typename T1, typename ...T2>
struct Traits;
// How can I specialize here so that Memory is being assigned properly??
template <typename T1, int N>
struct Traits<T1, int> {
static constexpr bool Static = 1;
using Memory = std::array<T1, N>;
};
template <typename T1>
struct Traits<T1> {
static constexpr bool Static = 0;
using Memory = std::vector<T1>;
};
}
template <typename T1, typename ...T2>
class Object
{
public :
void printd()
{
std::cout << "Is Static: " << Traits::Static << std::endl;
}
private:
using Traits = Intern::Traits<T1, T2...>;
using Memory = typename Traits::Memory;
Memory m_memory;
};
template <typename T1, typename ...T2>
static auto Create(T2&& ...ln) -> decltype(auto)
{
return new Object<T1, T2...>();
}
}
int main()
{
auto static_vector = Vector::Create<int>(10);
static_vector->printd();
auto active_vector = Vector::Create<int>( );
active_vector->printd();
}
我想知道如何专业化性状结构,以便将类型的内存正确分配为std :: array,n sem n set in示例中的n设置为10。
您不能直接使用整数,但是您可以将整数包装成类型。这可以使用例如std::integral_constant
:
template <typename T1, typename T2, int N>
struct Traits<T1, std::integral_constant<T2, N>> {
static constexpr bool Static = 1;
using Memory = std::array<T1, N>;
};
template <typename T1>
struct Traits<T1> {
static constexpr bool Static = 0;
using Memory = std::vector<T1>;
};
auto static_vector = Vector::Create<int, std::integral_constant<int, 10>>();
保持简单:
#include <array>
#include <vector>
#include <iostream>
#include <type_traits>
namespace Vector
{
struct VariableSize {};
template<std::size_t N> struct FixedSize {};
template<typename T, std::size_t N>
auto Create(FixedSize<N>)
{
return std::array<T, N>();
}
template<typename T, std::size_t N>
auto Create(VariableSize)
{
return std::vector<T>();
}
}
int main()
{
auto static_vector = Vector::Create<int>(Vector::FixedSize<10>());
auto active_vector = Vector::Create<int>(Vector::VariableSize());
}
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- Variadic模板未编译
- variadic模板中的模板参数推导失败
- 如何在OMNET++中添加专门的命令行参数?
- 在C++中释放内存期间,迭代器与指针有何不同
- [temp.variadic]中关于包扩展实例化的措辞
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 专门C++使用指针值类型的通用迭代器的模板函数?
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 专门用于"direct"函数类型(与函数指针类型相对)
- std::绑定variadic模板和自动返回类型
- 专门处理一个参数(C++模板)的两个模板参数
- is_same和variadic模板编译时错误无效转换
- 如何为自定义模板对象创建专门的函数模板
- 限制variadic模板类中的构造函数访问
- 收益率和回报有何不同?
- 如何专门使用variadic类模板