gpt4 book ai didi

c++ - 如何在不创建新类的情况下部分填写C++模板模板参数

转载 作者:行者123 更新时间:2023-12-01 14:38:50 24 4
gpt4 key购买 nike

是否可以以某种方式“部分地”填充模板模板参数的参数,而无需为每种尺寸引入新的类或using语句?
我的代码:

#include <vector>
#include <array>
#include <tuple>

struct A { int a = 1; };
struct B { int b = 1; };
struct C { int c = 1; };

template<template<class...> class _Storage, typename... _Components>
struct Foo {
using Storage = std::tuple<_Storage<_Components>...>;
Storage storage;

/* ... do stuff with storage ... */
};

int main() {
Foo<std::vector,A,B,C> fooV; // works
Foo<std::array<...,16>,A,B,C> fooA; // doesn't work
return 0;
}
显然,上面的“fooA”行是无效的C++,但这表明了我的意图。
  • fooV将创建我的Foo类,其中3个组件存储在std::vector中,因此A的std::vector<A>,B的std::vector<B>等。
  • fooA将创建我的Foo类,其中3个组件存储在最大大小为16的std::array中,因此A的std::array<A, 16>,B的std::array<B, 16>等。

  • 我能达到目的的唯一方法是引入模板化的using语句:
    template<typename _T> using MyArray16 = std::array<_T, 16>;
    不,它工作正常吗:
    Foo<MyArray16,A,B,C> fooA;      // works
    但是,我必须为我需要的每个数组大小引入新的 using类型,这远非最佳。当然,我可以使用 #define和所有其他代码来轻松地做到这一点,从而避免代码重复,但是它仍然不是最佳选择。
    有谁知道在不引入新类或 using语句的情况下实现此目标的语法方法?

    最佳答案

    老橡皮鸭再次袭击。突然我找到了答案。它仍然需要一个额外的类,但是我不需要每种尺寸的新类!

    template<size_t N> struct MyArray {
    template<typename _T>
    using Type = std::array<_T, N>;
    };

    Foo<MyArray<16>::Type,A,B,C> fooA16; // works!
    Foo<MyArray<256>::Type,A,B,C> fooA256; // works!

    关于c++ - 如何在不创建新类的情况下部分填写C++模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63584532/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com