相关疑难解决方法(0)

如何绕过 const char* 到 int 的转换

我想写一个函数

template <class Arg>
tuple<int, double> calc(Arg arg);
Run Code Online (Sandbox Code Playgroud)

它返回:

[arg,0] if arg is int,
[0,arg] if arg is double 
and [0,0] if arg is nor int or double. 
Run Code Online (Sandbox Code Playgroud)

我实现这个函数比较arg的类型(Arg)、 i的类型(int) 和d (double)的类型,然后分别等于 i=arg 或 d=arg。但是,如果我想将函数与字符串或其他类型一起使用,而这些类型无法转换为 int/double,则会出现转换错误(很明显,例如,因为我无法将 char* 等同于 int)。 如何绕过 const char* 到 int(或其他不可转换类型到 int)的转换?或者也许这个功能还有另一种实现?

#define GETTYPE(x) typeid(x).name()
template <class Arg>
    tuple<int,double> calc(Arg arg)
    {
        int i = 0;
        double d = 0;
        if (GETTYPE(arg) == GETTYPE(i))
        {
            i = arg;
        }
        else if …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
395
查看次数

如何在 C++ 中检查模板类中的类型?

我有一个 Button 类,可以显示图像或一行文本,我正在尝试使用模板实现。

如果是文本,则模板类型为:const char*

如果是图像,则模板类型为: const wchar_t*

下面是需要区分这两种类型的方法:

template <typename T>
void Button<T>::draw(EasyGraphics* canvas)
{
    canvas->setBackColour(colour);

    if (mouseOver)
    {
        canvas->setPenColour(EasyGraphics::BLACK, 4);
    }
    else
    {
        canvas->setPenColour(EasyGraphics::BLACK, 2);
    }

    canvas->drawRectangle(Entity::GetX(), Entity::GetY(), Entity::getWidth(), Entity::getHeight(), true);
    canvas->setFont(20, L"");
    canvas->setTextColour(textColour);

    switch (typeid(T))
    {
        // Button has display text
        case typeid(const char*):
        {
            canvas->drawText(displayData, Entity::GetX() + textXOfset, Entity::GetY() + (Entity::getHeight() / 4) - 3);
            break;
        }
        // Button has display image
        case typeid(const wchar_t*):
        {
            canvas->drawBitmap(displayData, Entity::GetX() + textXOfset, Entity::GetY() + (Entity::getHeight() / 4) - …
Run Code Online (Sandbox Code Playgroud)

c++ templates types typechecking switch-statement

0
推荐指数
1
解决办法
6011
查看次数

标签 统计

c++ ×2

switch-statement ×1

templates ×1

typechecking ×1

types ×1