テンプレートの 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 用に 1 つ、bigNumber 用に 1 つ
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;
}
助けてくれてありがとう。そして、この質問にはより良いタグが必要です。