如何在栈上实现C++模板特化且避免代码重复?
如何在栈上使用模板特化处理运行期条件?
当condition是constexpr编译期常量时,以下代码在C++11中可以正常运行:
bool condition = ...; MyClass<condition> myObj; // 20行使用myObj的业务代码
需求:当condition为true时,MyClass需要采用不同的底层成员变量/函数实现。
但当condition无法在编译期确定时,上述模板实例化的方法就失效了。
有没有比代码复制更优雅的解决方案?
目前只能通过复制代码的方式处理:
bool condition = ...; if (condition) { MyClass<true> myObj; // 20行使用myObj的业务代码 } else { MyClass<false> myObj; // 20行使用myObj的业务代码 }
我尝试过用派生类解决,但栈上无法写出这样的代码(语法不合法):
bool condition = ...; condition ? MyClass myObj : MyDerivedClass myObj; // 错误写法 // 20行使用myObj的业务代码
我了解几种替代方案,但都有明显缺点:
- 使用动态内存(比如智能指针),但希望避免内存分配的开销:
auto myObjPtr = condition ? new MyClass<true>() : new MyClass<false>(); // 20行使用myObjPtr的业务代码 - 将20行业务代码封装到函数中,依赖编译器的内联优化,但会降低代码的可读性。
内容的提问来源于stack exchange,提问作者robert
相关产品推荐
相关产品推荐

