gpt4 book ai didi

c++ - 作为基类模板参数的内部枚举

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:53 27 4
gpt4 key购买 nike

编译指示一次

#include "stdafx.h"
#include "Token.h"

//I would like this enum to be inside class Number
enum Number_enm {ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE};

class Number : public Token<Number_enm>//and this template parameter to be Number::Number_enm
{
private:

public:
Number(const Number_enm& num)
try:
Token(num)
{ }
catch(...)
{
cerr << "Error in Number::Number(const Number_enm&).";
return;
}

Number(const char num)
try:
Token(static_cast<Number_enm>(num & 0xf)) //get number value from char
{
#ifdef DEBUG_
cout << "Converting ctor, from char to Token.\n";
#endif
}
catch(...)
{
cerr << "Error in Number::Number(const char num).";
return;
}

};

#pragma once

/*Abstract class*/
template<class T>
class Token
{
typedef T value_type;
private:
value_type my_data_;
protected:
/*Token()
try: my_data_()
{ }
catch(...)
{
cerr << "Error in Token<T>::Token().";
return;
}*/
Token(const value_type value)
try:
my_data_(value)
{ }
catch(...)
{
cerr << "Error in Token<T>::Token(const value_type&).";
return;
}
/*Token(const Token& value): my_data(value)
{ }*/
Token& operator=(const Token& right)
{
#ifdef DEBUG_
cout << "Token& operator=(const Token& right).\n";
#endif
my_data = right;
return my_data;
}
public:
T get() const
{
return my_data_;
}
T set(const T& new_value)
{
T old = my_data_;
my_data_ = new_value;
return old;
}
};

不知是否可以做这种构造?

最佳答案

不,你不能,因为不可能转发声明一个枚举。此外,但不相关的是,那些构造函数 try block 是个坏主意。

另请参阅 Herb Sutter 的文章 http://www.ddj.com/cpp/184401297 - 他比我稍微不那么谴责。无论如何,正如我所说,try block 与您的问题无关。

关于c++ - 作为基类模板参数的内部枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1893835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com