读书人

简单的c++设计模式和结构有关问题

发布时间: 2013-04-21 21:18:07 作者: rapoo

简单的c++设计模式和结构问题
现在有一段代码是这样的



class A
{

int var_int;
string var_string;

void core(string input);
void core(int i);

void test_1()
{
//..........

core(var_int)

//..........
}

void test_2()
{
//..........same as test_1()

core(var_string)

//..........same as test_1()

}
}



对于test_1()函数和test_2()来说除了core(var_int)和core(var_string)之外,其它的上下文代码都相同.因此很容易想到可以将2段代码合并。void core(string input);和void core(int i);内部逻辑是不一样的。但是如何在逻辑上进行合并?

现在想到如下几种

1.多态虚函数.从A类派生出A1,A2类,实现各自的core()函数,然后分别通过A类的test()虚函数控制子类的实现函数,到时只需将父类指针指向子类运行test()函数即可。
但是这样实现的话需要core的入参是一样的,这里core的入参是不一样的。

2.c++模板函数,模板的话可以解决core入参不同的问题。执行函数的时候只要自动带入参数,函数会自动判断类型。但是模板的话,需要函数的结构都是一样的,void core(string input);和void core(int i);内部逻辑是不一样的。

3.c++特化模板函数,特化模板函数可能可以解决这个问题,但是从扩展性的角度来说,如果以后还有void core(int *)之类的新核心函数出现的话,那么就得将新的特化模板函数写在A类中,破坏了A类原有的结构。

因此希望能够有什么办法可以解决这个问题。。。。。

C++ 类 设计模式 模板 虚函数
[解决办法]
你的varint和varstring本来就A的东西,想要加新函数A本来就要改。
[解决办法]

class A
{
public:
A ()
{
var_int = 2;
var_string = "1234";
}
int& GetInt()
{
return var_int;
}
string& GetString()
{
return var_string;
}

template <class T>
void test(T& var)
{
// code 1
core(var);
// code 2
}

private:
int var_int;
string var_string;

void core(string input)
{
printf("%s\n", input.c_str());
}
void core(int i)
{
printf("%d\n", i);
}
};


A a;
a.test(a.GetInt());
a.test(a.GetString());


[解决办法]
引用:
引用:引用:现在有一段代码是这样的

C/C++ code?12345678910111213141516171819202122232425262728class A{ int var_int;string var_string; void core(string input);void core(in……

3的话可以理解的……2的话如果我没有理解错应该是这样的……虽然估计是我没理解你的意思……
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<iostream>
using namespace std;

class A
{
public:
void core(int a)
{
cout<<"1"<<endl;
}

void core(string a)
{
cout<<"2"<<endl;
}

template <class T>
void test_1(T var) {core(var); }
} b;

int main()
{
b.test_1<int>(1);
b.test_1<string>("1");
return 0;
}

读书人网 >C++

热点推荐