gpt4 book ai didi

c++ - 模板依赖实现

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:59 24 4
gpt4 key购买 nike

这是一段简单的代码:

#include <iostream>
#include <fstream>

template<typename T>
class A {
public:
T _v;
template<unsigned short V> void init() { _v *= V; }
void print(double txt) { std::cout << "Initialized with ?? : " << txt << std::endl; }
};

int main() {
A<double> foo;
foo._v = 3.5;
foo.init<2>();
foo.print(foo._v);

A<int> bar;
bar._v = 2;
bar.init<5>();
foo.print(bar._v);
}

我想实现函数 A::print(double)依赖于 unsigned short V ,例如,替换 ??通过 unsigned short从中init()已被实例化。我的问题是:(a)可行吗? (b) 如果 (a),如何?

在搜索 if (a) 时,我认为我可以向 class A<T> 添加一个仿函数, 在 V 中初始化其状态(值为 init() ) , 在 print(double) 中调用它,但我从未使用过此类对象,所以我不知道这是否可行。我基本上对任何建议持开放态度,我唯一需要的是调用 print保持不变(因为我将从不知道 unsigned short V 的值的其他类中调用它。

谢谢!

最佳答案

一种方式:

template<typename T>
class A {
public:
T _v;
unsigned short _v2;
template<unsigned short V> void init() { _v2 = V; _v *= V; }
void print(double txt) { std::cout << "Initialized with "
<< _v2 << " : " << txt << std::endl; }
};

或者为什么不:

template<typename T, unsigned short V>
struct A {
T _v = V;
void print(double txt) { std::cout << "Initialized with "
<< V << " : " << txt << std::endl; }
};

关于c++ - 模板依赖实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12703106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com