gpt4 book ai didi

c++ - 模板特化和静态局部变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:31 28 4
gpt4 key购买 nike

我有一个 X 类......

class X {...}

并且我想为某些类型集的每个不同类型创建一个 X 实例。 (其中一些类型不是类和/或不是我写的。)

为此我想到了:

template<typename T> X& XT();

然后对于每个类型 A、B 和 C:

template<> X& XT<A>() { static X x; return x; }
template<> X& XT<B>() { static X x; return x; }
template<> X& XT<C>() { static X x; return x; }

这行得通吗?这是最好的方法吗?有哪些替代方法?

最佳答案

您不需要特化该函数。你可以简单地这样做:

template<typename T> 
X& XT()
{
static X x;
return x;
}

并将其用作:

X &xa = XT<A>();
X &xb = XT<B>();
X &xc = XT<C>();
X &xd = XT<A>(); //xd is same as xa

所有三个对象 xa , xbxc是 X 的不同实例。但是,xaxd是相同的实例,因为它们都调用相同的函数。

这里要注意的一点是,编译器会为每个不同的模板参数实例化不同的函数。所以XT<A>()是一个不同于 XT<B>() 的函数,并且每个函数都有其自己的 static局部变量。所以 static XT<A>() 中的局部变量是与 XT<B>() 中的变量不同的实例.

关于c++ - 模板特化和静态局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051631/

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