我有一个类初始化类对象进行操作,说如何动态创建方法,在运行时
class AddElement{
int a,b,c;
}
用的方法来设置/获取A,B,C ......我的问题绝对是个逻辑问题 - 我说的addElement实现如下:
int Value=1;
Value+=AddElement.get_a()+AddElement.get_b()+AddElement.get_b();
现在想象一下,我想要做的,除了上述“A,b,C”现在阵列和的,而不是“加”我做的标量增加。在运行时有时我需要“一个”,但不能“b”或“c”的,所以我可以改写为:
Value+=AddElement.get_a();
(当然,+ =过载来表示标量加法...和值是相同的大小a) - 其他时间,我可能只需要b或c被添加等...
有没有办法去选择哪些元素,a,b,c,我想要初始化并在以后在运行时使用? (即,如果我不打算使用它,我不想malloc一个巨大的数组)。
最后我需要一个具有a,b,c的类,然后可以对a,b或c的任意组合进行操作的类 - 让用户在运行时定义他们需要的方法(通过某种标志或配置文件)。
目前我做了以下内容:
Value+=AddElement.get_a()*FlagA+AddElement.get_b()*FlagB+AddElement.get_c()*FlagC;
其中FLAGA = 1,如果你想用“A”中添加或0,如果你不希望它被包含(同为FlagB和FlagC)。如果数组'a'非常大,这是昂贵的。
我可能只是不够努力,但这个问题一直困扰着我。如果你需要我更好地定义这个问题,我会尽力,但我相信这足以让我的观点得到解决。
编辑2 我还忘了补充一点,另外的实施过程中,我可以不使用任何条件语句(这会在CUDA内核使用,我不能有任何线程diverngance - 我希望避免提及CUDA,因为这完全是一个C++的问题)
编辑3 我相信什么,我需要做的就是使用虚拟功能。我想以相同的方式调用函数,除非它执行特定于案例的功能。
编辑4 如果有人拍了一下我的解决方案,我将不胜感激 - 也许它太“异国情调”,有一个更简单的实现同样的目的方法。感谢所有的建议!
编辑5 感谢其他用户,我查看了战略设计模式 - 这正是我用于解决此问题的解决方案。之前我从来没有听说过这个消息,最终反思了一个已经完成的问题(花了一段时间让某个人提到它)。所以解决方案: 在运行时确定算法=战略设计模式。
答案真的取决于您是否期望在将来会超过三个元素 - 即,如果您需要可扩展的解决方案或最佳的最快解决方案。另外,你的代码有很多方面我不明白 - malloc?为什么你会用C++中的new来使用malloc?和(a)一样?大多数C++用户希望看到get_a()或类似的东西。 – Puppy 2010-10-25 14:59:25
对于malloc感到抱歉,正如我所提到的,我正在使用CUDA(这是基于C的...),并且通常阵列在CPU和GPU之间进行复制时需要使用malloc。所以我想我说的是我需要它被优化和扩展......是的,会有比a,b和c更多的元素,但是我在将来我知道我不会去需要所有a,b,c,d ... n - 通常我可能只需要1或2个这些元素,但我不希望每次都重新编译这些特定情况。 – Marm0t 2010-10-25 15:04:49
您正在阻止我们提供一些信息,这些信息对于帮助您解决问题至关重要。主要的问题是你不能使用条件,这意味着你不能循环。但是你确实有一个总结数组的机制,可能是一个汇编指令集。我相信你需要使用相同的机制来解决这个问题,但不知道没有更多的信息我可以帮忙。 – yonilevy 2010-10-25 15:42:31