【发布时间】:2021-12-23 15:07:55
【问题描述】:
我正在编写一些代码并意识到我不知道哪个更好用。每个的好处/缺点是什么?我目前正在使用带有 const uint16_t 的那个,因为我认为模板化它会通过创建独特的函数签名来扩展二进制文件。提前感谢任何想要帮助解释这一点的人!
template<typename T, uint16_t response_size>
T get_endpoint_value(const uint16_t endpoint_id)
对比
template<typename T, uint16_t response_size, uint16_t endpoint_id>
T get_endpoint_value()
对比
template<typename T>
T get_endpoint_value(serial::Serial* serial,
const uint16_t endpoint_id, const uint16_t response_size)
其中endpoint_id 只是一个被复制到缓冲区中的值。 response_size 用于在串行数据传输期间调整uint_t buffer[response_size] 的大小。
【问题讨论】:
-
您已经列出了所有参数。如果您有大量不同的模板参数组合,编译器会为这些集合中的每一个生成或多或少相同的代码,这可能会浪费您的内存。但是:如果函数中的所有东西都可以被优化掉并内联,结果可能是代码变小了。但这一切都取决于编译器、优化器级别和所有代码复杂性。查看结果的唯一方法:试试看!