【发布时间】:2026-02-01 22:15:01
【问题描述】:
我知道我不能将命名空间用作模板参数。但是,我正在尝试实现与此类似的行为:
template <typename T>
void foo(T::X* x)
{
T::bar(x);
}
除了 T 是命名空间而不是结构或类。获得与我的预期最相似的结果的最佳方法是什么?
【问题讨论】:
-
这是你唯一想做的事吗?因为您可以使用宏... :)
-
最好显示:你想如何使用这个模板;而是显示:您认为应该如何编写。事实证明,@StoryTeller 的回答不符合您的要求,但它是您提供的代码的有效修复。
-
大多数命名空间是否包含函数模板和/或函数,这些函数模板和/或函数接受来自相同命名空间和其他名为“bar”的命名空间的参数?作者用完了动词吗?请注意,这种情况对人类读者来说是令人困惑的。通过在函数名称周围使用括号从相同的命名空间或辅助命名空间从参数命名空间中选择,这确实可以使 C++ 编译器明确,但无论如何它都很臭。