【发布时间】:2015-10-03 21:53:47
【问题描述】:
部分伪代码如下:
struct Meta
{
std::tuple<..., ..., ...> funcVariantsTuple;
template<typename T>
void addVariantToTuple()
{
/* Do stuff */
}
}
class A
{
public:
template<typename T>
void func()
{
Meta::addVariantToTuple<T>();
}
};
int main()
{
A a;
a.func<int>();
constexpr first = std::tuple_size<decltype(Meta::funcVariantsTuple)>();
std::cout << first << std::endl; // Prints 1
a.func<char>();
constexpr second = std::tuple_size<decltype(Meta::funcVariantsTuple)>();
std::cout << second << std::endl; // Prints 2
}
目标是每次都重新定义元组,但仍保留旧的“存储”类型,这意味着只附加最后一个。
如果您有任何问题,请随时提问。我不太确定我是否解释得很好,但我不知道有什么其他相关的事情要告诉你。
感谢您的宝贵时间,
【问题讨论】:
-
C++ 是静态类型的。
decltype(Meta::funcVariantsTuple)在程序的不同点不能神奇地不同。我坚信你的追求是没有希望的。 -
我在问我们是否可以在编译期间重新定义一个类型,据说元编程是一种功能齐全的语言,目前这样的事情是可行的,但是如何,我有没有线索。
-
it is said that metaprogramming is a fully functional language没错。在功能齐全的语言中,没有可变变量。但是您希望Meta::funcVariantsTuple是这样一个变量。 -
罗杰,我想我必须找到另一种方法来完成我的计划,谢谢伊戈尔的帮助。
标签: c++ metaprogramming template-meta-programming