gpt4 book ai didi

c++ - 模板类中的命名空间特化

转载 作者:行者123 更新时间:2023-11-28 01:38:27 25 4
gpt4 key购买 nike

我有两个不同的命名空间,它们以两种不同的方式实现相同的方法和类。我正在编写一个使用此方法和类来做某事的类,我想知道是否有一种方法可以在不进行部分特化的情况下声明命名空间,如下所示:

#include <string>
#include <iostream>

namespace one
{
int test()
{
return 1;
}
}

namespace two
{
int test()
{
return 2;
}
}

enum names : int
{
first = 1,
second = 2
};

template <names>
struct base_class;

template <>
struct base_class<names::first>
{
using namespace ::one;
};

template <>
struct base_class<names::second>
{
using namespace ::two;
};

template <names ns>
struct delcare_namespace : public base_class<ns>
{
delcare_namespace()
{
std::cout << test() << "\n";
}
};

对于上面的代码,我得到

test’ was not declared in this scope

最佳答案

在类范围内不允许使用命名空间,命名空间别名也不允许。我不认为你可以做一个会以某种方式注入(inject)命名空间的特化。

它并不完全相同,但如果它是一个选项,可以在特化中从该命名空间声明您需要的所有函数,您可以将函数指针作为该特化的成员:

template <names>
struct base_class;

template <>
struct base_class<names::first>
{
static constexpr auto test = &one::test;
};

template <>
struct base_class<names::second>
{
static constexpr auto test = &two::test;
};

template <names ns>
struct delcare_namespace : public base_class<ns>
{
delcare_namespace()
{
std::cout << this->test() << "\n";
}
};

关于c++ - 模板类中的命名空间特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48350148/

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