gpt4 book ai didi

C++、泛型编程和虚函数。我怎样才能得到我想要的?

转载 作者:行者123 更新时间:2023-11-30 01:31:47 27 4
gpt4 key购买 nike

这是我想使用模板做的事情:

struct op1
{
virtual void Method1() = 0;
}

...

struct opN
{
virtual void MethodN() = 0;
}

struct test : op1, op2, op3, op4
{
virtual void Method1(){/*do work1*/};
virtual void Method2(){/*do work2*/};
virtual void Method3(){/*do work3*/};
virtual void Method4(){/*do work4*/};
}

我想要一个简单地派生自模板类的类,该模板类提供这些方法声明,同时使它们成为虚拟的。这是我设法想出的:

#include <iostream>

template< size_t N >
struct ops : ops< N - 1 >
{
protected:
virtual void DoStuff(){ std::cout<<N<<std::endl; };
public:
template< size_t i >
void Method()
{ if( i < N ) ops<i>::DoStuff(); }
//leaving out compile time asserts for brevity
};

template<>
struct ops<0>
{
};

struct test : ops<6>
{
};

int main( int argc, char ** argv )
{
test obj;
obj.Method<3>(); //prints 3
return 0;
}

但是,正如您可能已经猜到的那样,我无法重写我继承的 6 种方法中的任何一种。我显然在这里遗漏了一些东西。我的错误是什么?不,这不是家庭作业。这就是好奇心。

最佳答案

使用 GCC 4.3 测试。甚至不知道我为什么花时间在这上面 :-/

#include <iostream>

template <std::size_t N>
struct mark
{ };

template <std::size_t N>
struct op : op <N - 1>
{
virtual void do_method (const mark <N>&) = 0;
};

template <>
struct op <1>
{
virtual void do_method (const mark <1>&) = 0;
};

struct test : op <2>
{
template <std::size_t K>
void
method ()
{ do_method (mark <K> ()); }

virtual void do_method (const mark <1>&)
{ std::cout << "1\n"; }

virtual void do_method (const mark <2>&)
{ std::cout << "2\n"; }
};

int
main ()
{
test x;

x.method <1> ();
x.method <2> ();
}

我不知道如何将“prettifier”method() 模板函数移出 test

关于C++、泛型编程和虚函数。我怎样才能得到我想要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710098/

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