gpt4 book ai didi

c++ - 编译时类型检查 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:05 26 4
gpt4 key购买 nike

我已经创建了一个类型列表。然后我使用传递类型列表的模板创建一个类。当我用一些未指定的类型调用类的打印函数时,它们会被强制转换。如何在编译时强制执行确切的类型?因此,如果我使用未列出的类型,则会出现编译器错误。谢谢。

template <class T, class U>
struct Typelist
{
typedef T Head;
typedef U Tail;
};


class NullType
{
};

typedef Typelist<int,Typelist<float,Typelist<char*,NullType> > > UsableTypes;

template<class T>
class MyClass
{
public:
void print(T::Head _Value) { std::cout << _Value; }
void print(T::Tail::Head _Value) { std::cout << _Value; }
void print(T::Tail::Tail::Head _Value) { std::cout << _Value; }
private:
};


MyClass<UsableTypes> testclass;

void TestMyClass()
{
int int_val = 100000;
float flt_val = 0.1f;
char* char_val = "Hi";
short short_val = 10;
std::string str_val = "Hello";

testclass.print( int_val ); // OK 8-)
std::cout << endl;
testclass.print( flt_val ); // OK 8-)
std::cout << endl;
testclass.print( char_val ); // OK 8-)
std::cout << endl;
testclass.print( short_val); // this compiles OK and works ??? 8-(
std::cout << endl;
testclass.print( str_val ); // compile error 8-)
std::cout << endl;
}

@Kerrek SB:嗨,我认为它会帮助我进行下一步,即根据 t_list 内容、类型和类型数量创建打印函数。但我正在努力将编译时处理和运行时处理分开。我想要做的是为列表中的每种类型创建一个打印函数。因此,如果列表有两种类型,将创建两个打印函数,如果有五种类型,则将为每种类型创建五个打印函数。当我这样做时:

 typedef Typelist<int,Typelist<float,Typelist<char*,NullType> > > UsableTypes;

MyClass<UsableTypes> newclass

这是为列表中的每种类型创建一个 MyClass 的三个实例,还是创建一个实例并且我必须为每种类型创建一个打印函数?我觉得我脑子里几乎有所有的障碍,但就是无法将它们组合在一起。我们将不胜感激您提供的任何帮助。谢谢。

最佳答案

添加私有(private)函数模板

template<typename T> void print(T);

不需要实现。这应该捕获所有不存在显式打印的类型,并且由于它是私有(private)的,它会给出错误消息。

关于c++ - 编译时类型检查 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106560/

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