gpt4 book ai didi

c++ - 如何在模板中进行从 native 类型到用户定义类型的显式转换

转载 作者:行者123 更新时间:2023-11-28 05:59:20 25 4
gpt4 key购买 nike

我想要一个足够灵活的类来处理基于模板中 typename 类型的显式转换。如何做呢?我猜类将不得不处理转换

请注意,这似乎有很多代码需要费力地完成,但我尽可能地缩短了它的篇幅。

这是我想做的。

template<typename T> void fooAndBar(T x)
{
uint64_t count = 0;

//i want next line to work for x being either uint64_t or bigNumber
while( x <= (T)1000 ) {
count++;//do something
}
}

int main() {

uint64_t y = 1;
fooAndBar(y);

bigNumber z;
fooAndBar(z);

return 0;
}

bigNumber 定义为:

#include <vector>

typedef unsigned long long int uill;

class bigNumber //just a class that can handle reaaaly big numbers very striped down
{
public:
bigNumber();
~bigNumber() {}
bool operator<=(bigNumber rightSide);
template<typename T> static bigNumber convertToBigNumber(T in);
private:
std::vector<uill> digits;
};

bigNumber::bigNumber() { digits.push_back(1); }

bool bigNumber::operator<=(bigNumber rightSide) {
// dummy function
return digits.back() <= rightSide.digits.back();
}

template<typename T> static bigNumber bigNumber::convertToBigNumber(T in) {
bigNumber bn;
bn.digits.push_back(in);
return bn;
}

但我被困在单独的函数中。一个用于 uint64_t,一个用于 bigNumber,就像这样

void foo(uint64_t x) {

uint64_t count = 0;

// NB x is an uint64_t
while( x <= 1000 ) {
count++;//do something
}
}

void bar(bigNumber x) {

uint64_t count = 0;

// NB x is a bigNumber
while( x <= bigNumber::convertToBigNumber(1000) ) {
count++;//do something
}
}

int main() {

uint64_t y=1;
foo(y);

bigNumber z ;
bar(z);

return 0;
}

在此先感谢您的帮助。这个问题需要更好的标签,任何建议都会有所帮助。

最佳答案

C++ 可以处理从 int 到 bigNumber 的隐式转换。您需要做的就是为这种情况添加构造函数:

C++11:

bigNumber(uill e) : digits{e} {}

C++98:

bigNumber(uill e) { digits.push_back(e); }

你会很高兴的。

关于c++ - 如何在模板中进行从 native 类型到用户定义类型的显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33579437/

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