gpt4 book ai didi

c++ - 如何从双参数模板创建单参数模板以用作基类模板模板参数

转载 作者:太空狗 更新时间:2023-10-29 22:58:37 32 4
gpt4 key购买 nike

下面是我正在尝试做的一个例子。我只是用它来说明问题。

#include <iostream>
using namespace std;

template <int STEP, bool SIDE> class Stepper {
int step( int x ) {
return SIDE ? x + STEP : x - STEP;
}
};

template <template <bool> typename STEPPER> class DualStepper {
STEPPER<true> upStepper;
STEPPER<false> downStepper;

pair<int , int> step( int x ) {
return pair<int , int>( upStepper.step( x ), downStepper.step( x ) );
}
};


template <int STEP> class FixedDualStepper : public DualStepper<template <bool SIDE> using FT = Stepper<STEP, SIDE>> {

};


int main() {

FixedDualStepper<5> stepper;
pair<int, int> x = stepper.step( 10 );
cout << x.first << '\t' << x.second << endl;

return 0;
}

为此我得到了错误:

/Work/Learn/04PartialTemplate/main.cpp:23:115: error: template argument 1 is invalid
template <int STEP> class FixedDualStepper : public DualStepper<template <bool SIDE> using FT = Stepper<STEP, SIDE>> {
^
/Work/Learn/04PartialTemplate/main.cpp: In function ‘int main()’:
/Work/Learn/04PartialTemplate/main.cpp:31:29: error: ‘class FixedDualStepper<5>’ has no member named ‘step’
pair<int, int> x = stepper.step( 10 );

有没有我可以使用的语法

... : public DualStepper< ??? >

达到预期的效果。 IE。将 Stepper 的第一个参数设置为 STEP 并获取单个参数类模板以用作 DualStepper 的模板模板参数?

最佳答案

您可以使用一个结构和一个 using 声明来做到这一点。
它遵循一个最小的工作示例:

template <int STEP, bool SIDE>
class Stepper {};

template<int S>
struct Type {
template<bool b>
using TStepper = Stepper<S, b>;
};

template<template<bool> class C>
void f() {}

int main() {
f<Type<0>::TStepper>();
}

在您的情况下,它将是:

template <template <bool> class STEPPER>
class DualStepper {
// ....
};


template <int STEP>
class FixedDualStepper
: public DualStepper<Type<STEP>::template TStepper> {
// ...
};

关于c++ - 如何从双参数模板创建单参数模板以用作基类模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40003202/

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