c++ - 我可以在类之外定义私有(private)模板函数吗?

标签 c++ function templates private public

我在头文件中有两个模板函数,generatePermspermute(不是针对类,只是带有实用程序类型函数的通用头文件)。我希望 generatePerms 可以公开访问,但 permute 不应该。有什么办法可以做到这一点吗?我不认为我可以在类之外使用 public:private,但也许有一种方法可以构建可以实现此目的的头文件?

头文件示例:

//header.hpp
#ifndef H_UTILITY
#define H_UTILITY

#include <vector>

//this one should be private
template <typename T>
void permute( std::vector<T> values, int n, std::vector<T> *perms ){ /* do stuff */ }

//this one should be public
template <typename T>
std::vector<T> generatePerms( std::vector<T> values, int n ){ /* do stuff, calls permute() */ }

#endif

最佳答案

您可以将函数作为静态函数放入 Util 类中,如下所示

//header.hpp
#ifndef _H_UTIL_
#define _H_UTIL_

#include <vector>
class Util
{
    private:
    template <typename T>
    static void permute( std::vector<T> values, int n, std::vector<T> *perms ){ /* do stuff */ }

    public:
    template <typename T>
    static std::vector<T> generatePerms( std::vector<T> values, int n ){ /* do stuff, calls permute() */ }
};
#endif

并使用公共(public)函数 Util::generatePerms(...)。 (如果您不想编写 Util::generatePerms(...) 您可以将其包装在全局函数中,但我不推荐这样做。)

关于c++ - 我可以在类之外定义私有(private)模板函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31456377/

相关文章:

c++ - 有没有一种方法可以计算 CGAL 中 Surface_mesh 对象的 pca?

c++ - 最大缩减 Openmp 2.0 Visual Studio 2013/C++

c++ - 是否在两个不同的 fstream 未定义行为中打开相同的文件?

c++ - 我可以将 enable_if 与 typedef 一起使用吗?

c++ - 由于对模板化类型的通用(前向)引用而无法实例化函数模板

c++ - 函数的可选模板化参数

c++ - 合并内容相似但参数不同的函数

javascript - 调用javascript函数时什么时候使用()

javascript - 刚刚注意到我的 JavaScript 测验中的一个缺陷。我需要帮助来修复它

c - C 中参数的顺序