导出模板化内联函数 - 不允许定义函数dllimport

时间:2015-02-19 14:54:55

标签: c++ templates dll dllexport

我试图实施数学库,但我一直坚持出口。我有一个二维向量的模板类:

vector2.h:

    template <typename T>
class GE_API Vector2
{
public:
    T x;
    T y;

    // Indexation
    T& operator [] (const size_t i);
    const T& operator [] (const size_t i) const;

    bool operator == (const Vector2& v) const;
    bool operator != (const Vector2& v) const;

    // Negation
    const Vector2 operator - () const;

    // Assignement 
    const Vector2& operator = (const Vector2& v);

    const Vector2& operator += (const Vector2& v);

    const Vector2& operator -= (const Vector2& v);

    template <typename S>
    const Vector2& operator *= (const S& s);

    template <typename S>
    const Vector2& operator /= (const S& s);

    const Vector2 operator + (const Vector2& v) const;
    const Vector2 operator + (const T& s) const;
    const Vector2 operator - (const Vector2& v) const;
    const Vector2 operator - (const T& s) const;

    template <typename S>
    const Vector2 operator * (const S& s) const;

    const Vector2 operator * (const Vector2& v) const;

    template <typename S>
    const Vector2 operator / (const S& s) const;

    const Vector2 operator / (const Vector2& v) const;
};



template <typename T>
GE_API const T dot(const Vector2<T>& a, const Vector2<T>& b);



template <typename T>
GE_API const T length(const Vector2<T>& v);

//..and other functionality
#include <vector2.inl>

运算符和函数的定义位于头文件中包含的单独文件vector2.inl中。 GE_API是标准的dllimport / export宏。问题是当我尝试导出这个类和vector2.h头文件中定义的函数时,我在运算符的定义上得到错误,不允许定义dllimport函数。为什么这样以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下,您不需要为您的类指定dllimport / export。 因为所有源代码都可以提供给用户,并且只有他需要注意的是将vactor2.h头部包含在他的项目中。