我试图理解下面代码底部显示的语法“虚拟类值”。代码的上半部分在文件“ foo / base / Value.h”中显示了foo :: Value类的声明。下半部分显示另一个文件中的代码,其中显示“虚拟类值”语法。我的假设是声明中class关键字前面的virtual关键字在逻辑上没有任何作用。我想确认我的假设或更好地了解此语法的含义。
代码在我的系统上可以正常编译(Ubuntu 16.04,g ++-7,-std = C ++ 11)。 我能找到的唯一类似的帖子是以下内容,但它似乎偏离了轨道,没有可靠的答案,并且它已经有10年历史了:usage of virtual keyword with a class declaration
//File: "foo/base/Value.h"
#pragma once
#include <foo/base/Vector.h>
#include <memory>
namespace foo
{
class Value
{
public:
virtual Value* clone_() const = 0;
virtual void deallocate_() const = 0;
virtual boost::shared_ptr<Value> clone() const = 0;
virtual bool equals_(const Value& other, double tol = 1e-9) const = 0;
virtual void print(const std::string& str = "") const = 0;
virtual size_t dim() const = 0;
virtual Value* retract_(const Vector& delta) const = 0;
virtual Vector localCoordinates_(const Value& value) const = 0;
virtual Value& operator=(const Value& ) {return *this;}
template<typename ValueType>
const ValueType& cast() const;
virtual ~Value() {}
};
} /* namespace foo */
// Other File:
namespace foo
{
#include <foo/base/Value.h>
virtual class Value {
void print(string s) const;
size_t dim() const;
};
}