Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问模板包参数的模板参数_C++_Templates_C++17 - Fatal编程技术网

C++ 如何访问模板包参数的模板参数

C++ 如何访问模板包参数的模板参数,c++,templates,c++17,C++,Templates,C++17,我正在尝试创建一个模板类,该类将使比较函数能够返回一个整数[0-等于,>0a应排在第一位,我将从另一个方面解决这个问题:如果T有模板参数,如何提取模板参数?下面是一个示例: template<typename T> void foo(T v) { // T is std::vector<int>, how to extract `int`? } int main() { foo(std::vector{1, 2, 3, 4}); } 当它是向量时,用T

我正在尝试创建一个模板类,该类将使比较函数能够返回一个整数[0-等于,>0a应排在第一位,我将从另一个方面解决这个问题:如果
T
有模板参数,如何提取模板参数?下面是一个示例:

template<typename T>
void foo(T v) {
    // T is std::vector<int>, how to extract `int`?
}

int main() {
    foo(std::vector{1, 2, 3, 4});
}
当它是向量时,用
T
做什么能给我们带来什么?好吧,如果你能用一个简单的类型
T
做点什么,你甚至不需要模板参数,使你的界面更灵活:

template<typename>
struct sort_traits {};

template<typename T, uint32_t offset_, char order_>
struct sort_traits<Sort<T, offset_, order_>> {
    using type = T
    static constexpr auto offset = offset_;
    static constexpr auto order = order_;
};

这也增加了有一天添加另一种排序的可能性,这种排序可能会有不同的模板参数或不同的内容被暴露出来。

我将从另一个方面考虑这个问题:如果
T
有模板参数,如何提取模板参数?下面是一个示例:

template<typename T>
void foo(T v) {
    // T is std::vector<int>, how to extract `int`?
}

int main() {
    foo(std::vector{1, 2, 3, 4});
}
当它是向量时,用
T
做什么能给我们带来什么?好吧,如果你能用一个简单的类型
T
做点什么,你甚至不需要模板参数,使你的界面更灵活:

template<typename>
struct sort_traits {};

template<typename T, uint32_t offset_, char order_>
struct sort_traits<Sort<T, offset_, order_>> {
    using type = T
    static constexpr auto offset = offset_;
    static constexpr auto order = order_;
};

这也增加了有一天添加另一种排序的可能性,该排序将有不同的模板参数或不同的内容公开。

如果不使用此表单,这将变得非常容易:

template<typename T, uint32_t offset, char Order = 'A'>
struct Sort {};

template<uint32_t keyLength, template<typename T,uint32_t offset, char Order> class ... sort>
class Comparator;
是一个折叠表达式:

(sizeof(T) + ... + keyLength)

以此类推。

如果不使用此表单,则这将变得非常容易:

template<typename T, uint32_t offset, char Order = 'A'>
struct Sort {};

template<uint32_t keyLength, template<typename T,uint32_t offset, char Order> class ... sort>
class Comparator;
是一个折叠表达式:

(sizeof(T) + ... + keyLength)

诸如此类。

将包转发到
std::tuple
并使用
get()
似乎是最简单的方法。将包转发到
std::tuple
并使用
get()
似乎是最简单的方法。@JeJo-yes提到了它。我说提取是可能的,还有成员类型别名。@JeJo-yes提到了它。我说提取是可能的,还有成员类型别名。
(sizeof(T) + ... + keyLength)