【发布时间】:2021-12-26 13:30:18
【问题描述】:
我必须遵循以下程序:
#include <iostream>
#define max_dim 100
template<unsigned IDim>
struct Node{};
int main() {
uint x;
std::cout << "Input dimension: ";
std::cin >> x;
if(x < max_dim){
Node<x> node;
}else{
std::cout << "False Input.";
}
}
无法编译,因为表达式Node<x> node 需要x 是一个常量值,而事实并非如此。因为x 的可能性有限(受max_dim 限制)我当然可以只使用if 条件或switch 语句,但这会导致大量冗余代码(尤其是因为我正在为每个节点做一堆操作)。
我并不能真正改变节点的结构。
有没有更优雅的方法来实现这一点??
【问题讨论】:
-
无论您如何编写代码,问题始终是所有将
Node<x>用于x的所有可能值的函数都需要实例化。这将花费大量的编译时间,并且可能会导致一个大的二进制文件。你同意吗? -
您到底想要达到什么目的?这感觉像是一个 XY 问题。那个类
Node无论如何都没有状态,也没有方法。 -
@user17732522 无论如何,这是一个巨大的项目,目前有 1000 种方法。我认为编译时间不是问题。
-
@al3c 我尝试创建最小的示例,其中仅包含与我的问题相关的内容。在我巨大的实际代码中,Node当然有状态和方法。
-
@wittn 是否可以接受 C++20 解决方案或您支持哪个版本?