【发布时间】:2016-12-16 12:57:41
【问题描述】:
以下示例代码说明了我的问题:
#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();
}
我想知道如何专门化特征结构,以便将类型 Memory 正确分配为 std::array ,在上面的示例中将 N 设置为 10。
【问题讨论】:
-
你希望static_vector的类型是什么?
-
你希望
N在这里如何推导出来?为什么需要可变参数模板而不是简单的两个参数?