当前位置: 首页 > 知识库问答 >
问题:

是否可以将泛型变量改为特定的,或者用泛型变量的值初始化特定类型的变量?

容学林
2023-03-14
#include <iostream>
#include <typeinfo>
#include <string>
#include <cstdlib>
using namespace std;

template <typename First>

class VerifyIfTrue{

    protected:
        First AG;
        int tries = 0;
        int vaalue;
        int RT;
        string whatis;
        string lie1;
        string lie2;

        VerifyIfTrue(string twhatis, string tlie1, string tlie2) : whatis(twhatis), lie1(tlie1), lie2(tlie2)
{input();}

        void input(){
            if(tries == 0){
            cout << "Tell me your " << whatis << "\n";}else{
            cout << "Come on, what's your " << whatis << "\n";}
            cin >> AG;

            if(typeid(AG).name() != typeid(int).name())
            {
                int x = 0;
                AG = x;
                cout << "Wrong type" << endl;
                ++tries;
                input();
            }else{
                int a = AG;
                positivetest(a);
            }
void positivetest(int RT){
            if(RT <=0)
            {
                cout << lie1 << "\n";
                if(tries == 0)
                {
                    ++tries;
                    cout << lie2 << "\n";

            }
            int y = 0;
            AG = y;
            ++tries;
            input();
            }else{
            vaalue = AG;
            }
        }
            }
...

我得到以下错误:

初始化中无法将“std::__cxx11::basic_string”转换为“int”

有办法解决这个问题吗?我想把AG变成一个int,这样它就可以被传递到int参数中,或者如果它是int,就可以被测试;或者能够将其值赋给int

共有1个答案

邢星波
2023-03-14

如果constexpr(C++17)与std::is_same,则可以使用:

if constexpr (!std::is_same_v<int, First>) {
    int x = 0;
    AG = x;
    cout << "Wrong type" << endl;
    ++tries;
    input();
} else {
    int a = AG;
    positivetest(a);
}

 类似资料:
  • 问题内容: 在Swift3中,我不再能够检查泛型变量类型是否为class()。下面的代码返回了即使特定类型,并通过价值结构,而不是类。在Swift2.3和2.2中,它可以按预期工作,并且为。 如何使它在Swift 3中正常工作? 问题答案: 在Swift3中,由于引入了所有内容,因此可以将所有不能直接桥接到Objective- C的内容包装在一个不透明的Objective-C兼容框中。 因此将永远

  • 问题内容: 除了Swift,我还有这个问题。如何Type在泛型中使用变量? 我尝试了这个: This didn’t work either: 有没有办法做到这一点?我感觉到Swift只是不支持 它,并且给了我一些模棱两可的错误消息。 编辑:这是一个更复杂的示例,其中无法 使用通用函数标头来解决问题。当然,这没有任何意义, 但是我在代码中的某处合理地使用了这种功能 ,宁愿发布一个干净的示例而不是我的

  • 本文向大家介绍我可以将JavaScript变量声明为特定类型吗?,包括了我可以将JavaScript变量声明为特定类型吗?的使用技巧和注意事项,需要的朋友参考一下 JavaScript变量没有类型。值具有类型。这是声明JavaScript变量的方式- 你仍然可以这样写- 正如您在上面看到的那样,在变量声明中指定类型没有任何好处。这是因为类型由变量的值决定。

  • 此代码只是使用中间的来删除重复项,其中元素之间的相等性是根据提供的比较器定义的。 让我们给局部类型推断一个机会吧,我(天真地)想...于是我将上面的代码改为: 这对我来说是有意义的,因为的类型可以从的类型推断出来,或者我是这么想的。但是,修改后的代码无法编译,并生成以下错误: 注意1:编译代码的一种方法是将返回类型更改为。不过,那是一套很难用的... 注意2:另一种方法是在比较器中不使用逆变,但我

  • 问题内容: 因此,我正在开发这个通用的HashTable类,并且希望将其通用地用于任何数量的传入类型,并且我还想将内部存储数组初始化为LinkedList的数组(出于冲突目的),其中为确保类型安全,每个LinkedList都被预先指定为HashTable类中的泛型类型。我该怎么做?以下代码最能阐明我的意图,但当然不会编译。 问题答案: Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换

  • 局部变量 局部变量只在代码块或一个函数里有效 (参考函数里的局部变量) 环境变量这种变量会影响Shell的行为和用户接口 在大多数情况下,每个进程都会有一个"环境表", 它由一组由进程使用的环境变量组成。这样看来,Shell看起来和其他的进程一样。 每次一个Shell启动时,它都会创建新的合适的环境变量。如果它增加或是更新一个环境变量,都会使这个Shell的环境表得到更新(译者注:换句话说,更改或