首页 > 解决方案 > 将任何类型与 true 进行比较的 C++ 类方法

问题描述

我正在尝试使用模板编写一个小测试类,为简单起见,可以检查任何类型是否等于 true 或等于另一个值。

// generic value of some sort
template<class T>
class Value {
    public:
        T value;
};

// generic tester class
class Test {
    public:
        Value value_;
        Test();
        ~Test();
        void SetValueToTest(Value value){
             this->value_ = value;
        }
        bool IsTrue(){
             return this->value_ = true;
        }
        template<class T>
        bool IsEqual(T value){
            return this->value_ = value;
        }
};

到目前为止,我有这个主要错误

error: invalid use of template-name ‘Value’ without an argument list

我认为它希望我指定类型,<int>但这会破坏尝试将任何类型测试为真、等于其他类型等的目的。

标签: c++

解决方案


Value不是类型,它是类模板。Value<int>是一种类型,Value<double>是一种类型,等等。

您可以制作Test一个能够在Value其中使用的类模板。

这是一个演示程序:

// generic value of some sort
template<class T>
class Value {
   public:
      T value;
};

// generic tester class
template<class T>
class Test {
   public:
      Value<T> value_;
      Test() {}
      ~Test() {}
      void SetValueToTest(Value<T> value){
         this->value_ = value;
      }

      bool IsTrue(){
         return (this->value_.value == true);
      }

      template<class T2>
         bool IsEqual(Value<T2> value){
            return (this->value_.value == value.value);
         }
};

#include <iostream>

int main()
{
   Test<int> a;
   a.SetValueToTest(Value<int>{20});
   std::cout << std::boolalpha << a.IsTrue() << std::endl;
   std::cout << std::boolalpha << a.IsEqual(Value<short>{20}) << std::endl;
   std::cout << std::boolalpha << a.IsEqual(Value<short>{30}) << std::endl;
}

及其输出

false
true
false

推荐阅读